final.finalize,finally的區別

在java中,final可以用來修飾類,方法和變量(成員變量或局部變量)

final修飾類

表明該類不能被其他類所繼承。
final類中所有的成員方法都會隱式的定義爲final方法。

final修飾方法

相當於把方法鎖定,此方法不能被重寫。以防止繼承類對其進行更改。
注意:若父類中final方法的訪問權限爲private,將導致子類中不能直接繼承該方法,因此,此時可以在子類中定義相同方法名的函數,此時不會與重寫final的矛盾,而是在子類中重新地定義了新方法。

final修飾變量

final修飾一個成員變量,只能被賦值一次,賦值後其值不再改變。必須要顯示初始化。
這裏有兩種初始化方式,一種是在變量聲明的時候初始化;第二種方法是在聲明變量的時候不賦初值,但是要在這個變量所在的類的所有的構造函數中對這個變量賦初值。

finally

finally作爲異常處理的一部分,它只能用在try/catch語句中,並且附帶一個語句塊,表示這段語句最終一定會被執行(不管有沒有拋出異常),經常被用在需要釋放資源的情況下。
但是,在某些情況下,finally語句也不一定執行
例如:
1:finally對應的try語句塊沒有執行的情況下,finally語句塊也不會執行
2:finally對應的try語句塊執行,但是我們在 try 語句塊中執行了 System.exit (0) 語句,終止了 Java 虛擬機的運行。finally語句塊也不會執行
3:當一個線程在執行 try 語句塊或者 catch 語句塊時被打斷(interrupted)或者被終止(killed),與其相對應的 finally 語句塊可能不會執行。

finalize

finalize()是在java.lang.Object裏定義的,也就是說每一個對象都有這麼個方法。
這個方法在gc啓動,該對象被回收的時候被調用。所以一般是不需要程序員去實現finalize的。

特殊情況下,需要程序員實現finalize,當對象被回收的時候釋放一些資源,比如:一個socket鏈接,在對象初始化時創建,整個生命週期內有效,那麼就需要實現finalize,關閉這個鏈接。
使用finalize還需要注意一個事,調用super.finalize();

一個對象的finalize()方法只會被調用一次

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章