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.");
}
}
我仍在尝试,捕捉并最终阻止。我不明白的是,在此代码中,程序仅运行到发生非异常的第一个实例发生,然后退出 while 循环。
我的理解是,while 循环将运行到内存不足为止,所以有人可以解释一下代码如何在非异常的第一个实例上退出 while 循环。
谢谢!
马可
首先,x
等于 5,然后程序进入while
循环。由于 5 大于数组的大小,它将给出异常并转到异常块。在这里,x
将减少并再次进入while
循环。在x
达到 2 之前,不再有例外;因此,它可以到达break
线。因此,程序可以退出while
循环并完成
try{}
执行代码,直到发生异常
catch(ExceptionType e){}
如果抛出的异常满足提到的异常类型,则以下块将与提供的异常一起执行,此处为e
finally{}
执行而不考虑引发的异常
您创建了一个大小为 3 的数组,一个值为 5 的变量 x。所以在第一次迭代中你会看到ArrayIndexOutOfBoundsException
,但在catch
块x
递减。所以我们再去一次,现在x
是4,比3,最后是2。现在您将看不到任何异常,程序已完成。
如果无一例外地超过尝试,它将被执行,那么它将在一次迭代中中断,最后将被执行。
如果发生异常,它将进入 catch 块,然后进入最后。
它将根据上述给定的行为重申循环。请随时要求进一步澄清。