构造函数中的Java NullPointerException

构造函数中的Java NullPointerException,java,struct,nullpointerexception,Java,Struct,Nullpointerexception,我定义了一个具有公共属性的类 但是,在初始化构造函数中的值时,我得到一个NullPointerException 这是我的密码: class CacheBlock { public byte[] data; public int frame; public boolean ref; } public class Cache { private CacheBlock[] blocks; public Cache(int blockSize, int c

我定义了一个具有公共属性的类

但是,在初始化构造函数中的值时,我得到一个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      
    }   
}  
在这一行中,您只分配内存,而不初始化它

你应该加上

blocks[0]=new CacheBlock();
可疑线上方。

这就是问题所在:

blocks = new CacheBlock[10];
这里块数组已初始化,但索引0处没有CacheBlock对象,因此在下一行中访问它时,会有一个NPE

您需要创建CacheBlock实例并将其添加到块数组中

例如:

blocks[0] = new CacheBlock();

等。

创建数组后,它的元素是什么?是的,我现在看到了,看起来很明显。CaseBug是一个类,在创建数组中的每个项时,你必须调用构造函数,当初始化C++时,java不调用默认构造函数,就像C++一样。
blocks[0] = new CacheBlock();