异常处理恢复行为



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,但在catchx递减。所以我们再去一次,现在x是4,比3,最后是2。现在您将看不到任何异常,程序已完成。

首先,

如果无一例外地超过尝试,它将被执行,那么它将在一次迭代中中断,最后将被执行

如果发生异常,它将进入 catch 块,然后进入最后

它将根据上述给定的行为重申循环。请随时要求进一步澄清。

相关内容

  • 没有找到相关文章

最新更新