分享一个Java异常中比较典型的例题

今天在牛客网上练题时发现了一道有意思的题目,结果自己做错了,所以在博客上记录一下,加深一下印象。题目如下:

public class Test {

public static void main(String[] args) {
try {
int i=100/0;
System.out.println(i);
}catch(Exception e){
System.out.println(1);
throw new RuntimeException();
}finally {
System.out.println(2);
}
System.out.println(3);
}

}

上面这段代码的输出是什么?

这个题实在牛客网上找来做的,我当时的答案选的是:1,(我的思路:try中有异常进入catch中先执行System.out.println(1);然后抛出异常就结束了。)可是自己测试之后结果如下:


然后我又试了下把throw new RuntimeException();语句注释掉,结果输出为:


紧接着我又把throw new RuntimeException();语句放在了finally块中,就会报错,把System.out.println(2);System.out.println(3);两条语句删除后就没有了。输出结果如下:


总结一下这里相关的知识。

finally块的作用是为了保证无论出现什么情况,finally块里的代码一定会被执行。(主要用来关闭连接,关闭文件等)即使try块或者catch块中有return,也还是先执行finally块中的内容然后再return。

但是finally块中的代码是不是一定会被执行呢?答案是不一定,那么在什么情况下会不执行finally块中的代码呢?

1.在try块之前就有异常抛出了。

2.在try块或者catch块中强制退出(System.exit(0);)

3.即非后台线程的结束而被强制执行的,原文链接:http://blog.csdn.net/General_du/article/details/9832635

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值