1. 程式人生 > >java中Object類中的finalize()方法的理解

java中Object類中的finalize()方法的理解

看java api文件的過程中,有時候會發現並非想象中的那麼的通熟易懂,這個時候需要耐心、仔細的看,再加上一定的知識儲備,就更容易看懂了。除此之外,從文件中提煉有用資訊的能力也很重要!

看到finalize()方法的時候覺得很陌生,因為幾乎從沒用過。今天開啟api文件仔細的看了關於finalize()方法的說明,有了一些自己的理解,並在這裡用通俗的話講解出來。

在此之前,先上一段java api裡面的有關於finalize()方法的解釋:

finalize
protected void finalize()
                 throws Throwable當垃圾回收器確定不存在對該物件的更多引用時,由物件的垃圾回收器呼叫此方法。子類重寫 finalize
方法,以配置系統資源或執行其他清除。 finalize 的常規協定是:當 JavaTM 虛擬機器已確定尚未終止的任何執行緒無法再通過任何方法訪問此物件時,將呼叫此方法,除非由於準備終止的其他某個物件或類的終結操作執行了某個操作。finalize 方法可以採取任何操作,其中包括再次使此物件對其他執行緒可用;不過,finalize 的主要目的是在不可撤消地丟棄物件之前執行清除操作。例如,表示輸入/輸出連線的物件的 finalize 方法可執行顯式 I/O 事務,以便在永久丟棄物件之前中斷連線。 Object 類的 finalize 方法執行非特殊性操作;它僅執行一些常規返回。Object 的子類可以重寫此定義。 Java 程式語言不保證哪個執行緒將呼叫某個給定物件的 finalize
方法。但可以保證在呼叫 finalize 時,呼叫 finalize 的執行緒將不會持有任何使用者可見的同步鎖定。如果 finalize 方法丟擲未捕獲的異常,那麼該異常將被忽略,並且該物件的終結操作將終止。 在啟用某個物件的 finalize 方法後,將不會執行進一步操作,直到 Java 虛擬機器再次確定尚未終止的任何執行緒無法再通過任何方法訪問此物件,其中包括由準備終止的其他物件或類執行的可能操作,在執行該操作時,物件可能被丟棄。 對於任何給定物件,Java 虛擬機器最多隻呼叫一次 finalize 方法。 finalize 方法丟擲的任何異常都會導致此物件的終結操作停止,但可以通過其他方法忽略它。 丟擲: Throwable - 此方法丟擲的 Exception

接下來小編就提煉一下這段話中的關鍵資訊,把finalize用自己的話解釋一下:

1、finalize的使用時機:當jvm記憶體中的物件已經沒有引用指向它時,這個時候GC垃圾收集器會自動呼叫該物件的finalize()來執行一些操作。

2、finalize的用途:在gc回收物件之前執行一些清楚操作,比如說一些IO流物件和外部的連線尚未關閉,這個時候如果gc對這個物件進行回收,那麼finalize可以保證這個物件被回收之前其與外部的一些連線正常關閉。

3、在GC垃圾收集器呼叫某個物件的finalize方法之後,jvm會再一次的執行檢查該物件是否還存在其他引用。

人生漫漫,砥礪前行!