1

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 和 finally 块的问题。我不明白的是,在这段代码中,程序只运行到第一个发生非异常的实例发生,然后退出 while 循环。

我的理解是,while 循环将一直运行,直到内存不足,所以有人可以解释一下代码如何在第一个非异常实例上退出 while 循环。

谢谢!

马可

4

4 回答 4

3

首先,xis 等于 5,然后程序进入while循环。由于 5 大于数组的大小,它会给出异常并转到异常块。在这里,x将被减少并再次运行到while循环中。直到x达到2,不再有异常;因此,它可以到达break线。所以,程序可以退出while循环并完成

于 2013-01-29T08:27:30.297 回答
0

try{}

执行代码直到发生异常

catch(ExceptionType e){}

如果抛出的异常满足提到的异常类型,则以下块将与提供的异常一起执行,此处为e

finally{}

无论抛出什么异常都执行

于 2013-01-29T08:25:20.580 回答
0

您创建了一个大小为 3 的数组,一个值为 5 的变量 x。因此,在第一次迭代中,您将看到ArrayIndexOutOfBoundsException,但在catchx中递减。所以我们再去一次,现在x是 4,然后是 3,最后是 2。现在您将看不到任何异常并且程序已完成。

于 2013-01-29T08:28:48.183 回答
0

首先Try 将被执行,如果它毫无例外地被执行,那么它将在一次迭代中中断,最后将被执行

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

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

于 2013-01-29T08:29:27.777 回答