Java 为什么每个循环都不起作用?
我的代码不起作用:Java 为什么每个循环都不起作用?,java,loops,for-loop,foreach,Java,Loops,For Loop,Foreach,我的代码不起作用: Panel[] panelArr = new Panel[5]; for (Panel p:panelArr) { p = new Panel(); } Label lblName = new Label("Name:"); panelArr[0].add(lblName); 它产生了一个错误: Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at GUIV
Panel[] panelArr = new Panel[5];
for (Panel p:panelArr) {
p = new Panel();
}
Label lblName = new Label("Name:");
panelArr[0].add(lblName);
它产生了一个错误:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at GUIVehicles$NewSportsCarDialog.<init>(GUIVehicles.java:65)
线程“AWT-EventQueue-0”java.lang.NullPointerException中的异常
在GUIVehicles$NewSportsCarDialog.(GUIVehicles.java:65)
但是,如果我用这个for循环替换for each循环,它就会工作
for (int i = 0; i < 5; i++) {
panelArr[i] = new Panel();
}
for(int i=0;i<5;i++){
panelArr[i]=新面板();
}
就我所知,通过查看for-each循环的文档,两个for循环应该是等效的。显然情况并非如此,我想知道为什么?您的for each与此类似:
for (int i = 0; i < 5; i++) {
Panel p = panelArr[i];
p = new Panel();
}
for(int i=0;i<5;i++){
面板p=面板Arr[i];
p=新面板();
}
因此,对
p
的赋值显然对数组本身没有影响——您只是将p
重定向到其他地方,这对数组没有影响。因此,在for-each循环的末尾,所有数组元素仍然是null
。第二个代码段是填充数组的合适方法。因为p
是一个局部变量,所以它不是直接的panelArr[i]
在第一个循环中,基本上指定
将新面板设置为p
,而不是panelArr[i]
把p
和panelArr[i]
看作两个变量
到面板类型的对象
。你初始化的事实
p
并不意味着您也初始化了panelArr[i]
在第一个循环中,您不会将对象放入数组。您只需迭代具有5个空值的数组,创建局部变量Panel p
(指向null
)并分配一个新Panel
对象。
在此循环之后,数组仍然包含5个空值
如果您不必坚持使用数组,请改用列表:
List<Panel> panelList = new ArrayList<>(5); //Java7 diamond operator
panelList.add(new Panel());
panelList.add(new Panel());
panelList.add(new Panel());
panelList.add(new Panel());
panelList.add(new Panel());
List panelList=newarraylist(5)//Java7菱形运算符
panelList.add(新面板());
panelList.add(新面板());
panelList.add(新面板());
panelList.add(新面板());
panelList.add(新面板());
当然,这不是最优雅的方式,但您将无法获得NPE。非常感谢。我确信是我在最基本的层面上没有理解它,这被证明是正确的。