final、finally與finalize三者的區別
摘要:final為常量關鍵字,而finally為異常關鍵字,finalize為object自帶方法名。看到這個題目,感覺像是高中題目一樣。出題者用心良苦啊,將這三個聯絡起來,考察java基本功。在實際中finalize這個用得最少,而其他兩個都很熟悉了。但若想流暢的表達三者區別,還需自己好好理一理。
一、final這個關鍵字在Java中代表不可改變的,可用來修飾類,方法,變數。
對class來說,用法如:final class A{}代表類A為終極類,不能被繼承,也就沒有子類之說與介面實現者之說。因此一個類不能既被宣告為 abstract,又被宣告為final。
對method來說,用法如:public final void test(){} 代表此方法不能被重寫。
對variable來說,必須在宣告時賦值,且不能再改變。
先看看這個測試類:
public class Test {
int i =1;
final Test t = new Test();//Test物件引用變數t不能再指向其他Test物件,但可以通過t來改變此物件中的非常量屬性值。
public final void test(){
final int i = 1;//final修飾的變數必須在宣告時賦值,且不能再改變。
t.i++;
}
}
二、finally關鍵字用在異常處理中,用於處理異常後的清理工作,實際中一般用於關閉檔案流,釋放資源等操作。
System.out.println("----game start----");
try {
System.out.println("----try----");
return ;
} catch (NullPointerException e) {
System.out.println("----catch----");
} finally {
System.out.println("----finally----");
}
System.out.println("----game over----");
列印結果:
----game start----
----try----
----finally----
三、finalize一方法名。Java 技術允許使用 finalize() 方法在垃圾收集器將物件從記憶體中清除出去之前做必要的清理工作。這個方法是由垃圾收集器在確定這個物件沒有被引用時對這個物件呼叫的,它是在 Object 類中定義的,因此所有的類都繼承了它,子類覆蓋 finalize() 方法以整理系統資源或者執行其他清理工作。finalize() 方法是在垃圾收集器刪除物件之前對這個物件呼叫的。
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
for(int i=0;i<6;i++){
System.gc();
Test t = new Test();
}
System.gc();//若註釋此語句,則只列印0-4,這就是Java垃圾回收機制的一個簡單驗證。
}
static int count;
protected void finalize() throws Throwable {
// TODO Auto-generated method stub
super.finalize();
System.out.println("-----------finalize-----------"+count++);
}
}
列印如下:
———–finalize———–0
———–finalize———–1
———–finalize———–2
———–finalize———–3
———–finalize———–4
———–finalize———–5
相關文章
- final、finally、finalize()的區別(skycto JEEditor)
- Java中final、finally、finalize的區別Java
- Java中final,finally,finalize的區別Java
- final:finalize:finally:
- final、finally、finalize的理解
- 徹底區分final.finalize,finally
- 【Java面試題系列】:Java中final finally finalize的區別Java面試題
- final、finally、finalize的詳細分析
- final,finalize,finally的不同之處
- final,finally,finallize的區別
- 異常-面試題之final,finally和finalize的區別,如果在finally之前有return面試題
- 【java】final、finally、finallize的區別Java
- 『Java 語法基礎』final、finalize 和 finally 的不同之處Java
- final和finalize
- 看完這篇 final、finally 和 finalize 和麵試官扯皮就沒問題了
- jQuery與JavaScript與ajax三者的區別與聯絡jQueryJavaScript
- final與static關鍵字的區別?(skycto JEEditor)
- final修飾和static final修飾的區別
- Token ,Cookie、Session 三者區別CookieSession
- @ApiParam @PathVariable @RequestParam三者區別API
- View—requestLayout、invalidate 和 postInvalidate 三者的區別View
- Java中的String,StringBuilder,StringBuffer三者的區別JavaUI
- js框架---angular、vue、react的三者的區別?JS框架AngularVueReact
- 【ES6】var、let、const三者的區別
- tailf、tail -f、tail -F三者區別AI
- transition、animation、transform三者有什麼區別?ORM
- var、let和const三者有哪些區別?
- HTTPS、SSL、TLS三者之間的聯絡和區別HTTPTLS
- Python中read()、readline()和readlines()三者間的區別和用法Python
- 虛擬主機、VPS、雲伺服器三者的區別伺服器
- (第二講)Spring&Spring MVC&Spring Boot三者之間的區別與聯絡MVCSpring Boot
- Java 之String、StringBuffer 和 StringBuilder 三者區別介紹JavaUI
- ??與?:的區別
- Flutter 知識梳理 (Dart) - Dart 中 static, final, const 區別FlutterDart
- prettier @vue/eslint-config-prettier eslint-plugin-prettier 三者區別VueEsLintPlugin
- Filter 與 Servlet 的區別FilterServlet
- session與cookie的區別SessionCookie
- @Valid 與 @Validated 的區別
- Eureka與Zookeeper的區別