Java 为什么向静态集合添加对象会导致NullPointerException?
我正试图将2个子类对象添加到超类对象的静态集合中。然而,当我尝试将对象添加到集合中时,我收到一个空指针异常,并试图找出原因Java 为什么向静态集合添加对象会导致NullPointerException?,java,collections,Java,Collections,我正试图将2个子类对象添加到超类对象的静态集合中。然而,当我尝试将对象添加到集合中时,我收到一个空指针异常,并试图找出原因 public class MoverLogic{ static Collection<Super> superCollection; public static void main(String[] args) { SubAlpha sub1 = new SubAlpha(); SubBeta sub2 = new SubBet
public class MoverLogic{
static Collection<Super> superCollection;
public static void main(String[] args) {
SubAlpha sub1 = new SubAlpha();
SubBeta sub2 = new SubBeta();
superCollection.add(sub1); //I'm getting the null pointer exception here
superCollection.add(sub2);
}
公共类MoverLogic{
静态采集超采集;
公共静态void main(字符串[]args){
SubAlpha sub1=新的SubAlpha();
SubBeta sub2=新的SubBeta();
superCollection.add(sub1);//我在这里得到空指针异常
超级集合。添加(sub2);
}
您必须在使用前初始化超级集合。您必须在使用前初始化超级集合。您尚未初始化超级集合。
在main
中的任何内容之前,写下:
superCollection = new ArrayList<Super>();
您仍然可以添加
或删除
元素,但不能将其重新分配给任何其他内容
注意:如果ArrayList
不符合您的需要,您可以将其更改为不同的集合的具体实现方式。您尚未初始化超级集合。
在main
中的任何内容之前,写下:
superCollection = new ArrayList<Super>();
您仍然可以添加
或删除
元素,但不能将其重新分配给任何其他内容
注意:如果不适合您的需要,您可以将ArrayList
更改为不同的Collection
具体实现方式。您需要创建您的Collection对象,例如
static List<Super> superCollection=new LinkedList<Super>();
static List superCollection=newlinkedlist();
您需要创建收集对象,例如
static List<Super> superCollection=new LinkedList<Super>();
static List superCollection=newlinkedlist();
当类被构造(或像您的例子那样静态加载)时,类的成员被初始化为默认值,如int
s到0、boolean
s到false等。类似地,对象被初始化为null
因此,在您的情况下,superCollection
被初始化为null
,当您使用它时,您会得到一个NullPointerException
。通常认为集合被初始化为空集合对象,但事实并非如此。此外,您指的是哪个collection
呢?ArrayList
?链接列表代码>
大概是
static Collection<Super> superCollection = new ArrayList<>(); //Java 7
static Collection superCollection=new ArrayList();//Java 7
可以使用。或者与您喜欢的任何其他集合一起使用。当构造类时(或像您的情况一样静态加载),类的成员被初始化为默认值,例如int
s到0,boolean
s到false,等等。类似地,对象被初始化为null
因此,在您的情况下,superCollection
被初始化为null
,当您使用它时,您会得到一个NullPointerException
。通常认为集合被初始化为空集合对象,但事实并非如此。此外,您指的是哪个collection
呢?ArrayList
?链接列表代码>
大概是
static Collection<Super> superCollection = new ArrayList<>(); //Java 7
static Collection superCollection=new ArrayList();//Java 7
可以。或者你喜欢的任何其他集合
。你需要先初始化超级集合
。你真的应该阅读异常的堆栈跟踪。为什么每天都会出现这样的问题?要么是老师太差,要么是因为某些原因很难理解引用是用null
。无论如何,它表明说“超级集合是一个集合”是违反直觉的然后发现事实并非如此。补救办法是,如果java要求显式初始化所有变量。@Ingo抱歉,伙计,我从来没有任何老师。那么,@TomFang,如果编译器说:“第2行错误:请初始化变量超级集合!”你认为这会对你有帮助吗你需要先初始化超级集合
。你应该真正阅读异常的stacktrace。怎么每天都会出现这样的问题呢?要么老师很糟糕,要么因为某些原因很难理解引用是用null
初始化的。总之,这表明使用它是违反直觉的声明“superCollection是一个集合”,然后发现它不是。补救方法是,如果java要求对所有变量进行显式初始化。@Ingo抱歉,伙计,我从来没有任何老师。那么,@TomFang,如果编译器说这样的话,你认为会对你有帮助吗“第2行出错:请初始化变量超级集合!”