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循环。
谢谢!
Marco
答案 0 :(得分:3)
首先,x
等于5,然后程序进入while
循环。由于5大于数组的大小,因此它将给出异常并转到异常块。在这里,x
将被减少并再次进入while
循环。在x
达到2之前,不再有例外;因此,它可以达到break
行。因此,程序可以退出while
循环并完成
答案 1 :(得分:0)
try{}
执行代码,直到发生异常
catch(ExceptionType e){}
如果抛出异常符合提到的异常类型,则执行以下块以及提供的异常,此处为e
finally{}
执行不论抛出的异常
答案 2 :(得分:0)
您创建了一个大小为3的数组,一个值为5的变量x。因此,在第一次迭代中,您将看到ArrayIndexOutOfBoundsException
,但在catch
块中x
会递减。所以我们再去一次,现在x
是4,而不是3,最后它是2.现在你不会看到任何异常并且程序已经完成。
答案 3 :(得分:0)
首先尝试将被执行,如果它是无例外的,那么它将在一次迭代中断,最后将被执行。
如果发生异常,它将进入catch块,然后进入最终。
它将根据上述行为重申循环 ..随意请求进一步澄清。