finally为什么要在try块中的return之前执行

关于finally在异常处理中的一些心得

异常处理中,try{...}catch(Exception e){...}finally{...},try块是必须出现的,catch和finally至少出现一种。

在使用finally的时候,finally块中的代码总是被执行的,所以一般用来释放资源

public static void main(String[] args) {
		try {
			//业务代码
		} catch (Exception e) {
			//异常捕获块
		}finally{
			//资源释放块,总是被执行的
		}
	}

下面分几种情况讨论finally和try或者catch中代码的执行逻辑。

1.在try块或者catch块中有一条return语句,return语句是强制方法返回,一般执行到return语句到时候,程序立即结束该方法,但finally中的代码一定会被执行,所以在执行return之前,一定会先执行finally块中的代码

public static void main(String[] args) {
        try {
            System.out.println("try块被执行了...");//1
            /*
             * 此处加一条return语句,如果return语句执行,会立刻结束该方法,
             * finally中的代码不会被执行
             */
            return;//
        } catch (Exception e) {
            //异常捕获块
        }finally{
            //资源释放块,总是被执行的
            System.out.println("finally块被执行了...");//2
        }
        System.out.println("其他代码...");//3
    }
执行结果:

try块被执行了...
finally块被执行了...
显然,3语句没有被执行到,就是说执行3之前,方法已经结束了,但是语句2被执行了,因为finally中的代码一定会被执行。

此时,如果在try块或者catch块中使用System.exit(2),finally就不会被执行。

执行结果:

try块被执行了...
因为exit方法的调用时退出虚拟机,finally会失去执行机会。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值