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,但感谢数组只包含指向对象潜在实例的指针。您所做的只是创建