结论:
程序无异常时执行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)
其他自行验证了,在此就不多举例了。当然有错误的地方,希望大神们给出提示,便于改正。