关于tryc..atch...finally与return的最容易理解总结

结论:

程序无异常时执行try里面的return语句,有异常执行try外面的return语句

下面四种效果是等价的:

1.try{ return; }catch(){ } return;

2.try{ return; }catch(){ return; }

3.try{ return; }catch(){ return; }finally{ }

4.try{ return; }catch(){ }finally{ }return;

Finally有return语句时,不管前面怎样(即有没有异常)都是执行finally里面的return语句作为最后的返回结果

5.try{ return; }catch(){ }finally{ return; }

6.try{ return; }catch(){ return;}finally{ return; }

 

下面写法会出现编译错误,原因:在catch块中的return等价于在catch外的,如果catch块中没有,但是finally块中有也会一样报错,因为finally里面跟在外面也是只能存在一个

报错写法:

1.try{return;}catch(){return;} return;

2.try{return;}catch(){ }finally{return;}return;

3.try{return;}catch(){ return;}finally{return;}return;


下面是代码演示:

作为上面的结果验证:

测试:try{ return; }catch(){ }return; 

public static void main(String[] args) {
		int ee = testTry();
		System.out.println(ee);
	}
	private static int testTry() {
       try{
    	// int ss = 1/0;//制造异常
    	   System.out.println("try块");
    	   return 10;
       }catch(Exception e){
    	   System.out.println("catch块");
    	   e.printStackTrace();
    	 // return 11;
       }
       return 12;
      
	}
无异常执行结果:

try块
10

有异常测试:

public static void main(String[] args) {
		int ee = testTry();
		System.out.println(ee);
	}
	private static int testTry() {
       try{
    	 int ss = 1/0;//制造异常
    	   System.out.println("try块");
    	   return 10;
       }catch(Exception e){
    	   System.out.println("catch块");
    	   e.printStackTrace();
    	 // return 11;
       }
       return 12;
      
	}
有异常结果:

catch块
12
java.lang.ArithmeticException: / by zero
at com.test.trycatch.TestTryCatch.testTry(TestTryCatch.java:11)
at com.test.trycatch.TestTryCatch.main(TestTryCatch.java:6)


测试:try{ return; }catch(){ return; }finally{ }

public static void main(String[] args) {
		int ee = testTry();
		System.out.println(ee);
	}
	private static int testTry() {
       try{
    	 //int ss = 1/0;//制造异常
    	   System.out.println("try块");
    	   return 10;
       }catch(Exception e){
    	   System.out.println("catch块");
    	   e.printStackTrace();
    	  return 11;
       }finally{
    	   System.out.println("finally块");
       }
      // return 12;
      
	}
无异常结果:

try块
finally块
10

有异常测试:

public static void main(String[] args) {
		int ee = testTry();
		System.out.println(ee);
	}
	private static int testTry() {
       try{
    	 int ss = 1/0;//制造异常
    	   System.out.println("try块");
    	   return 10;
       }catch(Exception e){
    	   System.out.println("catch块");
    	   e.printStackTrace();
    	  return 11;
       }finally{
    	   System.out.println("finally块");
       }
      // return 12;
      
	}

有异常测试结果:

catch块
finally块
11
java.lang.ArithmeticException: / by zero
at com.test.trycatch.TestTryCatch.testTry(TestTryCatch.java:11)
at com.test.trycatch.TestTryCatch.main(TestTryCatch.java:6)

其他自行验证了,在此就不多举例了。当然有错误的地方,希望大神们给出提示,便于改正。










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值