目錄:
- 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負責呼叫的,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/544095.html
標籤:其他
上一篇:模擬實作strlen的三種方法
下一篇:vector的用法
