简述Java异常关键字finally,和return的那点事

异常处理中涉及到五个关键字:

  • try:用于监听代码,将可能出现问题的代码放在try里,一旦检测到异常就会将其抛出
  • catch:用于捕获异常,当try中的代码检测出问题,则会catch就会捕获
  • throw:用于抛出异常,一般可以写在catch块中
  • throws:用于抛出异常给上一级,用于方法上声明可能抛出的异常

还差最后一个就是本文的主角:

  • finally:finally语句块一定会被执行。它主要用于回收在try块里打开的物力资源(如数据库连接、网络连接和磁盘文件)。只有finally块执行完成之后,才会回来执行try或者catch块中的return或者throw语句,如果finally中使用了return或者throw等终止方法的语句,则就不会跳回执行,直接停止。

下边举例说明:

1、try catch中有return,finally中没有return

public class Test {
	public static void main(String[] args) {
		System.out.println(new Test().test());;
	}
	static int test(){
		int x = 1;
		try{
			return x; 
			}finally{
				++x; 
} }}

//返回结果为:1

执行结果为1,那么为什么是1呢,我开始也不是很理解,首先我们要知道return语句主要有两个用途:一方面用来表示一个方法返回的值,另一方面是指,它导致该方法退出,并返回那个值。由此看来,如果执行了return,那么方法就用退出了,这样一来finally是肯定不会答应的,因为Java规定了finally必须执行一次。因此,虽然执行了return,但发现finally还在等着呢,也不能输出结果呀,于是我们先悄悄把结果藏起来,然后执行一下finally,等finally跑完,我们将之前藏起来的结果返回,正式退出该方法。
2、try catch中有return,finally中也有return

public class Test {
    public static void main(String[] args) {
        System.out.println(new Test().test());;
    }
    static int test(){
        int x;
        int a;
        try{
            System.out.println("try");
            return a=1;
        }finally{
            System.out.println("finally");
           return x=2;
        } }}
//输出结果为:
try
finally
2

执行结果为2,和上边类似,try中return执行时,发现有finally还未执行,于是将a=1先放栈里,然后执行finally,但是万万没想到finally中也有return,更可气的是finally不讲究,直接将自己的return执行并输出结果x退出了方法。因此输出结果就成了2

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值