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代碼塊不能正常完成。