Finally关键字

  大家都知道在java处理异常的时候,try-catch-finally块是一个常见的结构,它用于捕获和处理异常,本文将重点介绍finally的重点用法。

一:什么是finally块?

        finally是java的一个关键字,在异常处理中,无论异常是否被处理,finally都会在以下情况下执行:

  1. 在'try'块中的代码执行完成后。
  2. 在发生异常并被 `catch` 块捕获后。

但是此块也会存在不执行的情况,如:

  1. 没有进入try块。
  2. 进去try代码块,但是代码运行中出现了死循环和死锁的状态。
  3. 进入try代码块,但是执行了System.exit()操作。

示例代码如下:

public static int finallyNotWork() {
		int temp = 1000;
		try {
			throw new Exception();
		}catch (Exception e) {
			return ++temp;
		}finally {
			temp = 9999;
		}
	}

注意:finally是在return表达时运行后执行的,此时将要return的结果已经被暂存起来,待finally代码结束后在将之前的暂存的结果返回。也就是说最终返回的结果是1001,而不是9999。所以finally的职责不在于对变量进行赋值操作,而是清理资源,释放连接,关闭管道流等的操作。而更加危险的方式是以下情况:

public class TryFinally {
	public static int x = 1;
	public static int y = 10;
	public static int z = 100;
	
	public static int finallyReturn() {
		try {
			return ++x;
		}catch (Exception e) {
			return ++y;
		}finally {
			return ++z;
		}
	}
	public static void main(String[] args) {
		int value = finallyReturn();
		System.out.println("value is " + value);
		
		System.out.println("x = " + x);
		System.out.println("y = " + y);
		System.out.println("z = " + z);
	}
}

 思考:大家可以先思考一下这个函数的执行结果?

执行结果如下:value=101; x=2; y=10; z=101;

以上执行结果说明:

  1. 最后return的动作是由finally代码块中的return ++z完成的,所以返回的结果是101。
  2. 语句return ++x中的++x被成功执行,所以运行结果是x=2。
  3. 如果有异常抛出运行结果将是y=11,而x=1.

二:总结

        finally代码块中使用return语句 ,是返回值判断变得更加的复杂,所以避免返回值不可控,我们不可以在finally代码块中使用return语句。总之,finally主要目的是为了清理资源,释放连接,关闭管道流以及一些垃圾回收的操作。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

香蕉炒肉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值