JAVA中try,catch,finally的return研究

最近在坛子里看到有人问相关问题。

自己发现自己第一时间打错了。

所以又重新验证了一下。

先上结论给伸手党。


1.finally块和最外层有且只能有一个return,否则出编译期错误。(catch块不影响此结论)

----try块和最外层有且只能有一个return,否则出编译期错误。(try块有时,catch块也必须有return)

----return可以不写在外层而写在finally里,但是会报警告(标黄)。(try块,catch块不影响此结论)


2.finally有return时,不管有没有异常,都会从finally的return跑掉

----try块有return。没有异常(不进入catch块)时,finally块有return走finally,否则走try的return。

--------外层有也不走,其实是运行到try的return时,执行finally在返回try的return,但是finally也有return,所以相当于半路跑路了

----try块有return。有异常(进入catch块)时,finally块有return走finally,否则走catch的return。

--------解释同上,到finally时半路跑路了。



验证代码:

/**
 * JAVA中try,catch,finally的return研究
 * @author qian.xu
 *
 */
public class MyReturn {

	
	public String test(){
		int[] a = new int[2];
		try{
			//for(int i=0;i<2;i++){       //正常系
			for(int i=0;i<3;i++){     //异常系
				//执行到i=2会报错
				a[i] = i;
			}
			System.out.println("try块执行完毕");
			//return "我是try块的return";
		}catch(Exception e){
			System.out.println("catch块被执行");
			return "我是catch块的return";
		}finally{
			System.out.println("finally块被执行");
			return "我是finally块的return";
		}
		//return "我是最后一个return";
	}
	
	
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		MyReturn myReturn = new MyReturn();
		System.out.println(myReturn.test());
	}

}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值