带有静态数组的java空指针异常

标签 java static static-methods static-members static-array

从静态成员方法访问静态数组时出现空指针异常。 当我从线程调用 setData(x, y, z) 时抛出异常。当我调试它时,我发现 data[0] 在我尝试写入它时为空。我只是不明白它怎么可以为空

public class dataContainer 
{
    private static final short nrOfDataElements = ids.total_ids;
    private static regularDataElement[] data = new regularDataElement[nrOfDataElements];


    public static synchronized void getData(final short i, regularDataElement r)
    {
        if ( (i >= 0) && (i < nrOfDataElements) )
            r.set(data[i].getTimestamp(), data[i].getValue());  
    }          

    public static synchronized void setData(short i, double ts, long val)
    {
        if ( (i >= 0) && (i < nrOfDataElements) )
            data[i].set(ts, val); //<<-------null pointer exception, debugging showed data[i] == null, (with i = 0 and nrOfDataElements = 12)
    }
}

public class regularDataElement 
{
    regularDataElement()
    {
        set(0, 0);
    }

    public void set(double _ts, long _val)
    {
        System.out.println(this.ts + " " + _ts + " " + this.val + " " + _val); System.out.flush();
        this.ts = _ts;
        this.val = _val;    
    }

    public double getTimestamp()
    {
        return this.ts;
    }

    public long getValue()
    {
        return this.val;
    }

    private double ts;
    private long val;

}

最佳答案

语句 private static regularDataElement[] data = new regularDataElement[nrOfDataElements]; 使用大小为 nrOfDataElements 的数组初始化 data。它不会初始化此数组中的每个元素。即,所有元素均为空。

如果你想初始化元素,你应该自己做。例如,您可以添加一个静态 block 来处理此问题:

static regularDataElement[] data = new regularDataElement[nrOfDataElements];
static {
    for (int i = 0; i < nrOfDataElements; ++i) {
        data[i] = new regularDataElement();
    }
}

关于带有静态数组的java空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20057412/

相关文章:

c - 默认情况下,gcc 链接到静态或动态标准库吗?

java - Android库类的静态变量的生命周期是多少?

java - 使用静态导入时出现未经检查的异常,怎么来的?

java - 无法使用 PowerMockito 模拟系统类静态方法

Java按钮事件调用另一个类中的方法

java - 获取 MismatchedInputException : Cannot deserialize instance of Object while parsing JSON to result object

java - 如何在 EAR 中的 jar 和共享库之间的 Websphere Liberty Profile 中获取类加载器可见性

php - PHP 中匿名函数和静态匿名函数到底有什么区别?

java - UCAExc:::3.0.7 未知标记:插入日期时出错

java - jsp 内容中标记文件的双重编码 UTF-8 输出