try、catch、finally用法总结:spa
一、无论有没有异常,finally中的代码都会执行code
二、当try、catch中有return时,finally中的代码依然会继续执行orm
三、finally是在return后面的表达式运算以后执行的,此时并无返回运算以后的值,而是把值保存起来,无论finally对该值作任何的改变,返回的值都不会改变,依然返回保存起来的值。也就是说方法的返回值是在finally运算以前就肯定了的。blog
四、finally代码中最好不要包含return,程序会提早退出,也就是说返回的值不是try或catch中的值io
执行顺序:class
public static void main(String[] args) { System.out.println(test()); } public static int test(){ int i = 1; try{ i++; System.out.println("try block, i = "+i); }catch(Exception e){ i ++; System.out.println("catch block i = "+i); }finally{ i = 10; System.out.println("finally block i = "+i); } return i; }
结果输出以下:test
try block, i = 2程序
finally block i = 10方法
10总结
先执行try里面代码,再finally代码,最后return。
当咱们把return放到try块中和catch块中,会怎么样呢?
public static void main(String[] args) { System.out.println(test()); } public static int test(){ int i = 1; try{ i++; System.out.println("try block, i = "+i); return i; }catch(Exception e){ i ++; System.out.println("catch block i = "+i); return i; }finally{ i = 10; System.out.println("finally block i = "+i); } }
结果输出以下:
try block, i = 2
finally block i = 10
2
如咱们总结同样:
1、当try、catch中有return时,finally中的代码依然会继续执行
二、finally是在return后面的表达式运算以后执行的,此时并无返回运算以后的值,而是把值保存起来,无论finally对该值作任何的改变,返回的值都不会改变,依然返回保存起来的值。也就是说方法的返回值是在finally运算以前就肯定了的。
另外,若是在finally中存在return,有黄色警告:finally block does not complete normally,意思是finally代码块不能正常完成。