学习课程《JAVA入门第三季》
网址:http://www.imooc.com/video/3069
课程中使用到的代码:
//外部类
public class HelloWorld {
public static void main(String[] args) {
HelloWorld b=new HelloWorld();
int a= b.test();
System.out.println(a);
//s b.test2();
// this.printI;
}
// @SuppressWarnings("finally")
public int test(){
int d=0,r=100;
try{while(d>-2){
System.out.println(d);
r=r+100/d;
d--;
return 11111;
}
}catch(Exception e){
e.printStackTrace();
System.out.println("循环抛出异常了");
// return 22222;
}
finally{
System.out.println("我是finally");
// return 33333;
}
System.out.println("test方法正常执行完毕");
return 44444;
}
}
情况1:try{} catch(){}finally{} return;
有无报错都按顺序执行。返回的都是return的值;
情况2:try{} catch(){}finally{ return }
有无报错都按顺序执行。返回的都是return的值;
情况3:try{ return; }catch(){} finally{return;}
有异常情况时:
1) 如果第一次循环就没有报错了时候,程序执行try块中return之前(包括return语句中的表达式运算)代码,此时退出是因为块中有return;再执行finally块,因为finally块中有return所以提前退出。返回的是finally下的return值
2) 如果第一次循环就已经报错了的时候,程序执行try块中return之前(包括return语句中的表达式运算)代码,此时退出是因为异常,执行catch块;再执行finally块,返回的是finally下的return值
无异常情况时:
Try, finally,返回的是finally下的return值
情况4:try{ return; }catch(){} finally{} return;
无异常情况:
程序执行try块中return之前(包括return语句中的表达式运算)代码;
再执行finally块,finally块之后的语句return,因为程序在try中已经return所以不再执行。返回的是try中的return;
有异常情况:
1) 如果第一次循环就已经报错了的时候,代码没有执行到try中的return,就会执行catch块,再finally,返回最后一个的return;
2) 如果第一次循环就没有报错了时候,程序执行try块中return之前的代码,再执行finally,返回的是try中的return;
情况5:try{ return;}catch(){return;} finally{return;}
程序执行try块中return之前(包括return语句中的表达式运算)代码;
有异常:
1) 如果第一次循环就没有报错了时候,执行catch块中return之前(包括return语句中的表达式运算)代码;则再执行finally块,因为finally块中有return所以提前退出。返回的是finally下的return值
2) 如果第一次循环就已经报错了的时候,执行catch块中return之前(包括 return语句中的表达式运算)代码;则再执行finally块,因为finally块中有return所以提前退出。返回的是finally下的return值
无异常:则再执行finally块,因为finally块中有return所以提前退出。返回的是finally下的return值
情况6:try{ return;} catch(){return;} finally{} return;
程序先执行try
有异常:
1) 如果第一次循环就没有报错了时候,则再执行finally块,因为finally块中有return所以提前退出。返回的是try中的return;
2) 如果第一次循环就已经报错了的时候,执行catch块中return之前(包括 return语句中的表达式运算)代码;则再执行finally块,最后返回的是catch下的return值
无异常:执行完try再finally再return. 返回的是try中的return;
情况7:try{} catch(){return;}finally{return;}
程序先执行try
有异常情况时:
无论是否循环的第一次执行,都先执行catch块中return之前(包括return语句中的表达式运算)代码;
再执行finally块,返回的是finally下的return值
无异常情况时:
执行finally块,因为finally块中有return所以提前退出。返回的是finally下的return值
情况8:try{ } catch(){return;} finally{} return;
程序先执行try
有异常:
无论是否循环的第一次执行,都先执行catch中return之前(包括return语句中的表达式运算)代码,再执行finally语句中全部代码,最后执行catch块中return. finally之后也就是4处的代码不再执行。返回的是catch中的return
无异常:
执行完try再finally再return. 返回最后一个的return;
总结:
- try和finally,一定会被执行,但 catch和last不一定会执行,finally下的有return的值,则返回的是finally下的有return的值;
- 其他情况都是第一次遇见return遇见谁就执行谁的return
- 按照执行顺序就是try ,catch,finally,last
- return只能是块中的最后位置
- finally块中的return和最后的return是不能并存的
- try和catch中的return不能单独使用,try也不能和catch一起使用,必须搭配finally或者last一起使用
结论:
遵循前三条总结,可以准确把握异常返回值的结果
遵循后三条总结,可以穷尽return中的位置。
心得:
若不能亲手测试总结,结论总是别人的。
以上。
热门评论
太棒了!!!!!!!!!!!!!!!