Java中的新功能获得NullPointerException

时间:2012-09-03 14:15:51

标签: java nullpointerexception

我已声明:

Discursiva[] questoesDiscursivas = new Discursiva[10];

这是:

public class Discursiva extends Questao{
    private String criteriosCorrecao;
}

Questao是:

public class Questao {
    private String pergunta;
    private double peso;
}

所以我刚刚做了:

str = JOptionPane.showInputDialog("Pergunta da Questao:");
questoesObjetivas[i].setPergunta(str);

得到了java.lang.NullPointerException。

  

我在oracle docs中读过:当应用程序试图使用时抛出   在需要对象的情况下为null。其中包括:

Calling the instance method of a null object. 
Accessing or modifying the field of a null object. 
Taking the length of null as if it were an array. 
Accessing or modifying the slots of null as if it were an array. 
Throwing null as if it were a Throwable value.

我不知道为什么我会收到NullPointerException。 请不要低估我的问题,我仍在学习Java,它就像我的第一个代码,我希望得到你的帮助,所以,请问,我该如何解决这个问题?

7 个答案:

答案 0 :(得分:6)

你的数组已经满了null s。

您需要在数组的每个插槽中放置一个new Discursiva(),然后才能使用它。

答案 1 :(得分:3)

在执行此操作之前questoesObjetivas[i]首先执行此操作

 questoesObjetivas[i] = new Discursiva();

你会在here.

上找到一篇好文章

如果声明了对象数组,则数组仅包含对象的引用。对象Array中的每个值都初始化为null。因此,当您尝试访问它时,您将获得NullPointerException

因为数组本质上是covariant [if Sub is a subtype of Super, then the array type Sub[] is a subtype of Super[] **Effective Java**],所以应该更喜欢ArrayList

ArrayList<Discursiva> questoesDiscursivas = new ArrayList<Discursiva>(10);
questoesDiscursivas.add(new Discursiva());

您可以在有效Java Item 25: Prefer lists to arrays

中阅读更多内容

答案 2 :(得分:2)

您需要在数组中创建对象:

Discursiva[] questoesDiscursivas = new Discursiva[10];

for (int i=0;i<10;i++){
    questoesDiscursivas = new Discursiva();
}

答案 3 :(得分:1)

你已经声明了questoesObjetivas [i],但没有初始化它。

答案 4 :(得分:0)

创建后,对象数组的所有元素都被初始化为null,因此questoesObjetivas[i].setPergunta(str)将给出NullPointerException,因为该数组的i元素确实是null。尝试使用Discursiva类的实例填充数组。

答案 5 :(得分:0)

猜测问题出在你给出的两行中:

questoesObjetivas[i]为空或questoesObjetivas为空

答案 6 :(得分:0)

您需要实例化一个Object,以便将其放入数组中:

   questoesObjetivas[i] = new setPergunta(str);