Java中的新功能获取NullPointerException

Java中的新功能获取NullPointerException,java,nullpointerexception,Java,Nullpointerexception,我已宣布: Discursiva[] questoesDiscursivas = new Discursiva[10]; 即: public class Discursiva extends Questao{ private String criteriosCorrecao; } 而奎斯托是: public class Questao { private String pergunta; private double peso; } 所以我就这么做了: str =

我已宣布:

Discursiva[] questoesDiscursivas = new Discursiva[10];
即:

public class Discursiva extends Questao{
    private String criteriosCorrecao;
}
而奎斯托是:

public class Questao {
    private String pergunta;
    private double peso;
}
所以我就这么做了:

str = JOptionPane.showInputDialog("Pergunta da Questao:");
questoesObjetivas[i].setPergunta(str);
并获得java.lang.NullPointerException

我在oracle文档中读过:当应用程序试图使用 如果需要对象,则为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,这就像我在Java中的第一个代码,我希望得到您的帮助,所以请,我如何解决这个问题?

在执行此操作之前,请先执行此操作

 questoesObjetivas[i] = new Discursiva();
你会在上面找到一篇好文章

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

因为数组是协变的
[如果Sub是Super的子类型,那么
数组类型Sub[]是Super[]**Effective Java**]
的一个子类型,本质上人们应该更喜欢
ArrayList

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

在执行此操作之前,您可以阅读有效Java
第25项:更喜欢列表而不是数组

 questoesObjetivas[i] = new Discursiva();
你会在上面找到一篇好文章

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

因为数组是协变的
[如果Sub是Super的子类型,那么
数组类型Sub[]是Super[]**Effective Java**]
的一个子类型,本质上人们应该更喜欢
ArrayList

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

您可以在高效Java
第25项:首选列表而非数组中阅读更多内容
您需要在数组中创建对象:

Discursiva[] questoesDiscursivas = new Discursiva[10];

for (int i=0;i<10;i++){
    questoesDiscursivas = new Discursiva();
}
Discursiva[]questoesDiscursiva=新的Discursiva[10];

对于(int i=0;i您需要在数组中创建对象:

Discursiva[] questoesDiscursivas = new Discursiva[10];

for (int i=0;i<10;i++){
    questoesDiscursivas = new Discursiva();
}
Discursiva[]questoesDiscursiva=新的Discursiva[10];

对于(int i=0;i您的数组充满了
null
s


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

您的数组中充满了
null
s


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

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

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

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


questoesObjetivas[i]
为空或
questoesObjetivas
为空

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


questoesObjetivas[i]
为null或
questoesObjetivas
为null

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

   questoesObjetivas[i] = new setPergunta(str);

您需要实例化对象,以便将其放入数组中:

   questoesObjetivas[i] = new setPergunta(str);


您已经声明了questoesObjetivas[i],但没有对其进行初始化。

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

您在哪里初始化
questoesObjetivas
?什么是
questoesObjetivas
,它有多大?当抛出异常时,
i
的值是多少?这将有助于查看您正在使用的所有代码,或者至少查看setPergunta(字符串)中的代码函数如果您在调试器中查看代码,您将能够看到
questoesDiscursivas
中充满了
null
s。这是因为在Java中创建数组不会隐式地用对象填充数组。SLaks和AmitD都让我看到了我的错误,谢谢大家!您在哪里初始化
questoesObjetivas
?抛出异常时,什么是
questoesObjetivas
,它有多大,以及
i
的值是多少?查看您正在使用的所有代码,或者至少查看setPergunta(字符串)中的代码会有帮助函数如果您在调试器中查看代码,您将能够看到
questoesDiscursivas
中充满了
null
s。这是因为在Java中创建数组不会隐式地用对象填充数组。SLaks和AmitD都让我看到了我的错误,谢谢大家!我只是不知道为什么要再次声明它,因为我已经这样做了:Discursiva[]questoesdiscursiva=新的Discursiva[10];可能看起来很奇怪,但您刚刚分配了数组。默认情况下,所有值都设置为null。感谢它的工作,仍然需要11分钟来接受awnser,但感谢该数组只包含指向对象的潜在实例的指针。您所做的只是使用这些指针创建数组(最初指向null),但不是实例本身。添加了文章的链接,请仔细阅读。我只是不知道为什么我必须再次声明它,因为我已经这样做了:Discursiva[]questoesDiscursivas=new Discursiva[10];可能看起来很奇怪,但您刚刚分配了数组。默认情况下,所有值都设置为null。好吧,感谢它的工作,仍然需要11分钟来接受awnser,但感谢数组只包含指向对象潜在实例的指针。您所做的只是创建