首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异常处理恢复行为

异常处理恢复行为
EN

Stack Overflow用户
提问于 2013-01-29 16:22:48
回答 4查看 761关注 0票数 1

对StackOverFlow来说是新手,对Java来说也是相当新的。在此之前,我一直在用C语言编程,并试图了解Java的基础知识。

只是对下面的代码有一点困惑:

代码语言:javascript
复制
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和and代码块。我不明白的是,在这段代码中,程序只运行到第一个非异常发生的时候,然后退出while循环。

我的理解是while循环会一直运行,直到内存耗尽,所以有人能解释一下代码是如何在第一次出现非异常时退出while循环的吗?

谢谢!

马可

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-01-29 16:27:30

首先,x等于5,然后程序转到while循环。由于5大于数组的大小,它将给出异常并转到异常块。在这里,x将被减少并再次进入while循环。在x达到2之前,没有任何例外;因此,它可以到达break行。因此,程序可以退出while循环并完成

票数 3
EN

Stack Overflow用户

发布于 2013-01-29 16:25:21

try{}

执行代码,直到发生异常。

catch(ExceptionType e){}

如果抛出的异常满足所提到的excetpion类型,则随后的块将与提供的exception一起执行,此处为e

finally{}

执行,而不考虑抛出的异常

票数 0
EN

Stack Overflow用户

发布于 2013-01-29 16:28:48

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14578432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档