final finally finalize 的區別

一、final

簡單來說:

  • final修飾類,說明這個類不能被繼承,是以個頂級類;
  • final修飾變量,說明這個變量是常量;
  • final修飾方法,表示這個方法不能被繼承。

1、final修飾變量/方法參數

修飾基本類型,賦予它的值是不可變的,即是常量;修飾的是一個對象,這個對象的引用是不可變的,但是對象本身還是可以變的。

直觀的來說,一個變量或方法參數被final修飾,就表示它只能被賦值一次,但是JAVA虛擬機爲變量設定的默認值不記作一次賦值。

* 修飾變量必須得初始化,初始化的方式有:

  • 在定義的時候初始化;
  • 在初始化塊中初始化;
  • 在類的構造器中初始化;
  • 靜態變量也可以在靜態初始化塊中初始化。
[注]靜態final變量可以在構造器中初始化,卻不可以在初始化塊中初始化。

2、final修飾方法

final修飾的方法可以被繼承但不可以被重寫。
特殊說明的是,具有private訪問權限的方法也可以增加final修飾,但是由於子類無法繼承private方法,因此也無法重寫它。編譯器在處理private方法時,是按照final方法來對待的,這樣可以提高該方法被調用時的效率。不過子類仍然可以定義同父類中的private方法具有同樣結構的方法,但是這並不會產生重寫的效果,而且它們之間也不存在必然聯繫。

3、final修飾類

final修飾的類是不可以被繼承的。
由於final類不允許被繼承,編譯器在處理時把它的所有方法都當作final的,因此final類比普通類擁有更高的效率。


二、finally

finally只能跟在try/catch語句中,try子句中執行需要運行的內容,catch子句用於捕獲異常,finally子句表示不管是否發生異常,都會執行。當try/catch中有return、break、continue,編譯器會先執行finally語句塊,再執行return,break,continue。


三、finalize()

finalize()是Object類中的方法,Java技術允許使用 finalize() 方法在垃圾收集器將對象從內存中清除出去之前做必要的清理工作。這個方法是由垃圾收集器在確定這個對象沒有被引用時對這個對象進行調用。finalize()方法是在垃圾收集器刪除對象之前對這個對象調用的子類覆蓋 finalize() 方法以整理系統資源或者執行其他清理操作。
[注]調用它的作用只是建議GC啓動,清理無用的對象釋放內存空間,但是GC的啓動並不是一定的,這由JVM來決定。
發佈了26 篇原創文章 · 獲贊 9 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章