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] /** * JAVA中try,catch,finally的return研究 */ 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()); } }