2015-02-25 3 views
0

Я определил класс с общедоступными атрибутами.Java NullPointerException в конструкторе

Однако при инициализации значений в конструкторе я получаю NullPointerException.

Вот мой код:

class CacheBlock 
{ 
    public byte[] data; 
    public int frame; 
    public boolean ref; 
} 

public class Cache 
{ 
    private CacheBlock[] blocks; 

    public Cache(int blockSize, int cacheBlocks) 
    { 
     blocks = new CacheBlock[10];  
     blocks[0].data = new byte[blockSize]; //line that causes exception  
    } 
} 
+0

После того как вы создадите массив, каковы его элементы? – immibis

+0

Да, я вижу это, кажется совершенно очевидным сейчас. – MistarLouda

+0

'CacheBlock' - это' class', вы должны вызвать конструктор при создании каждого элемента в массиве, 'java' не вызывает конструктор по умолчанию при инициализации массива, как в' C++ ' –

ответ

1

Это вопрос:

blocks = new CacheBlock[10]; 

Здесь block массив инициализирован, но не CacheBlock объект с индексом 0 поэтому, когда он доступен в следующей строке, есть NPE.

Вам нужно будет создать экземпляры CacheBlock и добавить его в массив block.

Например:

blocks[0] = new CacheBlock(); 

и так далее.

-1
blocks = new CacheBlock[10]; 

Эта линия, вы только выделить память, но не инициализировать его.

Вы должны добавить

blocks[0]=new CacheBlock(); 

над подозрительной линии.

Смежные вопросы