对StackOverFlow来说是新手,对Java来说也是相当新的。在此之前,我一直在用C语言编程,并试图了解Java的基础知识。
只是对下面的代码有一点困惑:
public class Exercise5 {
private static int[] ia = new int[3];
static int x = 5;
public static void main(String[] args) {
while(true) {
try {
ia[x] = 1;
System.out.println(ia[x]);
break;
} catch(ArrayIndexOutOfBoundsException e) {
System.err.println(
"Caught ArrayIndexOutOfBoundsException");
e.printStackTrace();
x--;
} finally {
System.out.println("Are we done yet?");
}
}
System.out.println("Now, we're done.");
} }
我仍然在尝试使用try,catch和and代码块。我不明白的是,在这段代码中,程序只运行到第一个非异常发生的时候,然后退出while循环。
我的理解是while循环会一直运行,直到内存耗尽,所以有人能解释一下代码是如何在第一次出现非异常时退出while循环的吗?
谢谢!
马可
发布于 2013-01-29 16:27:30
首先,x等于5,然后程序转到while循环。由于5大于数组的大小,它将给出异常并转到异常块。在这里,x将被减少并再次进入while循环。在x达到2之前,没有任何例外;因此,它可以到达break行。因此,程序可以退出while循环并完成
发布于 2013-01-29 16:25:21
try{}
执行代码,直到发生异常。
catch(ExceptionType e){}
如果抛出的异常满足所提到的excetpion类型,则随后的块将与提供的exception一起执行,此处为e
finally{}
执行,而不考虑抛出的异常
发布于 2013-01-29 16:28:48
您创建了一个大小为3的数组,一个值为5的变量x。因此,在第一次迭代中,您将看到ArrayIndexOutOfBoundsException,但在catch块中,x是递减的。所以我们再来一次,现在x是4,然后是3,最后是2,现在你看不到任何异常,程序就完成了。
https://stackoverflow.com/questions/14578432
复制相似问题