目錄: finally的使用 finally面試題 final、finally、finalize的區別 finally子句的使用: 1、在finally子句中的代碼是最後且一定會執行的,即使try語句塊中的代碼出現異常 2、finally子句必須和try一起出現,不能單獨編寫 3、finally子句 ...
目錄:
- finally的使用
- finally面試題
- final、finally、finalize的區別
finally子句的使用:
1、在finally子句中的代碼是最後且一定會執行的,即使try語句塊中的代碼出現異常
2、finally子句必須和try一起出現,不能單獨編寫
3、finally子句出現的情況如下:
通常finally語句塊中完成資源的釋放/關閉。
try{ System.out.println("hi"); return; }finally{ System.out.println("finally"); } //註意,try和finally聯合使用,沒有catch也可以,但try不能單獨使用 以上代碼執行順序: 先執行try,後執行finally,最後執行return
註意:return語句只要執行,所在方法必然結束!
try{ System.out.println("hi"); //退出JVM System.exit(0); }finally{ System.out.println("finally"); } //控制台輸出:hi 原因:finally只有在退出JVM之後,其代碼才不會執行
finally面試題:
判斷下麵程式輸出的結果為多少?
public static void main(String[] args){ int result = m(); System.out.println(result); } public static int m(){ int i = 100; try{ return i; }finally{ i++; } }
答案:100
原因:
存在一些Java語法規則,方法體中的代碼必須遵循自上而下的順序依次執行;return語句一旦執行,整個方法必須結束。
在以上程式中執行完int i=100之後,代碼執行就到了return i;此時為return 100;此語句擱置,先執行finally,最後執行return 100;
具體執行過程可以看代碼反編譯之後的結果
//上述代碼反編譯之後的結果 public static int m(){ int i=100; int j=i; i++;//finally語句確實在return i;之前執行 return j;//return 100 Exception exception; exception; i++; throw exception; }
final、finally、finalize的區別:
final是一個關鍵字,表示不變的,最終的
final int i=100;
其中final修飾的類無法繼承、修飾的方法無法覆蓋、修飾的變數不能重新賦值。
finally也是一個關鍵字,和try聯合使用,用在異常機制中,並且finally語句塊中的代碼一定會執行
finalize()是object類中的一個方法,作為方法名出現,屬於標識符,這個方法是由垃圾回收器G負責調用的。