异常处理恢复行为

时间:2013-01-29 08:22:48

标签: java exception try-catch-finally

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

4 个答案:

答案 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块,然后进入最终

它将根据上述行为重申循环 ..随意请求进一步澄清。