我有一个 for 循环:
for(Location l : locs) {
System.out.println("X:"+l.getX()+", Y:"+l.getY());
try {
if(layer.getObject(l) != null)
out.add(layer.getObject(l));
} catch(NullPointerException e) {
}
}
每次迭代,它从Location[]
数组中获取一个位置,并打印出该位置的 X 和 Y。然后,下一行从地图图层(不是标准地图库)中的位置获取对象,并将其添加到ArrayList
.
我得到一个java.lang.ClassCastException
,但这不是我的问题。这个问题我可以自己解决。我的问题是为什么输出看起来像这样(特别是显示异常的方式):
run:
X:0, Y:1
X:0, Y:2
X:0, Y:3
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [LMapGrid.OverlayObject;
X:1, Y:1
X:1, Y:3
X:2, Y:1
X:2, Y:2
X:2, Y:3
at MapGrid.MapGrid.getAdjacentOfType(MapGrid.java:86)
at BehaviorMap.BehaviorMap.main(BehaviorMap.java:26)
Java Result: 1
BUILD SUCCESSFUL (total time: 0 seconds)
它找到的对象位于位置 (1,1),因此,异常在位置 (1,1) 处引发。这是从程序开始时设置的。程序在主线程上运行。不过,我的问题是,为什么输出会以这种方式出现?
这种布局方式似乎意味着当程序到达 (0,3) 时抛出了异常,但当它到达 (1,1) 时肯定已经抛出异常。然后,输出将暗示,一旦发现异常,程序将继续执行,直到循环退出。
我不明白这种行为。当遇到未处理的异常时,为什么程序不直接退出?此外,为什么异常消息会出现在调用异常的行之前?请注意,System.out.println
在块之前try
。
最后,为什么错误会以如此奇怪的方式分裂?(在那个错误信息出现,然后细节出现后程序出现继续执行。) 平台是NetBeans 7.2。