NullPointerException:初始化变量突然为null

时间:2015-07-08 14:45:00

标签: java arrays nullpointerexception null

我最近开始使用Java编程,现在遇到以下问题:

我写了一个课程" ComparePattern",得出​​最佳拟合分数,然后应该给出分数和最佳拟合模式。到目前为止没有问题。虽然回馈模式似乎不起作用。它是一个双值数组,比如说" bestpattern"。我已经实现了一个返回方法来回馈所说的双数组。

public void double[] getBestPattern(){return bestpattern;}  

现在,在运行比较之后,如果我从我的主类(比如MainClass)调用return-method,它返回一个null的数组。

double[] test = ComparePattern.getBestPattern();

做类似

的事情
double[] test=ComparePattern.bestpattern;

也给出了null。但是,如果我在我的ComparePattern类的counstructor中打印bestpattern,它在生成它的位置,它显然不是null但保持期望值。现在来了有趣的部分。如果我在ComparePattern的构造函数中给出以下指令(当然,在生成bestpattern之后),它会工作并返回正确的值:

MainClass.test=bestpattern;

显然,这不是我想要这样做的方式。我已经以静态和非静态方式尝试了这一点,并且我确信所有变量都已正确初始化。任何人都知道为什么java将bestpattern从一个正常运行的双数组改为null?

1 个答案:

答案 0 :(得分:1)

你的问题可能在ComparePattern的构造函数中。它可能看起来像这样:

public class ComparePattern    
{
    private double[] bestpattern;
    ...
    public ComparePattern ()
    {
        ...
        double[] bestpattern = new double[..];
        ...
    }
    ...
}

这意味着您的构造初始化名为bestpattern的本地数组,而不是具有相同名称的成员数组。您只需将其更改为:

public class ComparePattern    
{
    private double[] bestpattern;
    ...
    public ComparePattern ()
    {
        ...
        bestpattern = new double[..];
        ...
    }
    ...
}

这可以解释为什么您的getBestPattern()方法返回null。