Java中finally块与return之间的执行顺序

我们知道,finally块作为java异常处理机制的一部分,其中的代码无条件执行,通常执行释放资源等操作。

但是想本小白这样的初学者可能会有这样的疑惑:有返回值的方法执行到return就会结束,return与finally块之间的执行发生冲突时会发生什么呢?为了解决这种疑惑,本小白做了一下尝试:

  • 1在try块中有return,在finally中没有return,程序执行没有异常:
  • public class ExceptionDemo {
    
    	public static String test(String str){
    		try {
    			return str;
    		} catch(Exception e){
    		} finally{
    			str = "456";
    			System.out.println("finally");
    		}
    		return null;
    	}
    	
    	public static void main(String[] args) {
    		System.out.println(test("123"));
    	}
    }
    程序执行结果为
    finally
  • 123
这个结果说明,程序执行到return str,并没有直接返回,而是强行执行finally块,但是这是返回值str已经确定,finally中即使尝试修改也无济于事,但是“finally”依然会执行。
注意这时在finally块之外必须有return语句以保证方法一定会有返回值,否则会报编译错误。

  • 2在try块中有return,在finally中也有return,程序执行没有异常:
  • public class ExceptionDemo {
    
    	public static String test(String str){
    		try {
    			return str;
    		} catch(Exception e){
    		} finally{
    			str = "456";
    			System.out.println("finally");
    			return str;
    		}
    	}
    	
    	public static void main(String[] args) {
    		System.out.println(test("123"));
    	}
    }
    • 程序执行结果为
      finally
    • 456
    这个结果说明,当finally块中包含return,程序就会无视try中的return语句,此时编译器会报异常(finally block does not complete normally)提醒我们try中的return语句将不会执行。

    注意这是finally块以外就不能再有任何代码,否则会报(Unreachable code)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值