Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么向静态集合添加对象会导致NullPointerException?_Java_Collections - Fatal编程技术网

Java 为什么向静态集合添加对象会导致NullPointerException?

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

我正试图将2个子类对象添加到超类对象的静态集合中。然而,当我尝试将对象添加到集合中时,我收到一个空指针异常,并试图找出原因

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行出错:请初始化变量超级集合!”