1. 程式人生 > >構造方法與析構方法區別

構造方法與析構方法區別

Java構造方法

類有一個特殊的成員方法叫作構造方法,它的作用是建立物件並初始化成員變數。在建立物件時,會自動呼叫類的構造方法。
構造方法定義規則:Java 中的構造方法必須與該類具有相同的名字,並且沒有方法的返回型別(包括沒有void)。另外,構造方法一般都應用 public 型別來說明,這樣才能在程式任意的位置建立類的例項也就是物件。
示例:下面是一個 Rectangle 類的構造方法,一個是帶有兩個引數,分別表示矩形的長和寬;

另一個是不帶引數:
public class Rectangle {
    public Rectangle(int w, int h) {
        width = w;
        height = h;
    }
    public Rectangle()

{}
}

那麼建立例項,我們有兩種方式:一個是Rectangle rectangle=new Rectangle (20,20);另一個是Rectanglerectangle=new Rectangle ();都能建立例項,兩個唯一不同:是否初始化變數

注意點:1、每個類至少有一個構造方法。如果不寫一個構造方法,Java 程式語言將提供一個預設的,該構造方法沒有引數,而且方法體為空。如果一個類中已經定義了構造方法則系統不再提供預設的構造方法。2、儘量不在類的構造器中建立、初始化大量的物件或執行某種複雜、耗時的運算邏輯。

Java析構方法

當垃圾回收器將要釋放無用物件的記憶體時,先呼叫該物件的finalize()方法。如果在程式終止前垃圾回收器始終沒有執行垃圾回收操作,那麼垃圾回收器將始終不會呼叫無用物件的finalize()方法。在Java的Object基類中提供了protected

型別的finalize()方法,因此任何Java類都可以覆蓋finalize()方法,通常,在析構方法中進行釋放物件佔用的相關資源的操作。

Java 虛擬機器的垃圾回收操作對程式完全是透明的,因此程式無法預料某個無用物件的finalize()方法何時被呼叫。如果一個程式只佔用少量記憶體,沒有造成嚴重的記憶體需求,垃圾回收器可能沒有釋放那些無用物件佔用的記憶體,因此這些物件的finalize()方法還沒有被呼叫,程式就終止了。也就是無用物件沒被回收。

程式即使顯式呼叫System.gc()或Runtime.gc()方法,也不能保證垃圾回收操作一定執行,也就不能保證物件的finalize()方法一定被呼叫。

當垃圾回收器在執行finalize()方法的時候,如果出現了異常,垃圾回收器不會報告異常,程式繼續正常執行。
@Override
protected void finalize(){
    System.out.println("in finalize");
}
在 Java 程式設計裡面,一般不需要我們去寫析構方法,這裡只是瞭解一下就可以了。

總結:

簡單理解,構造方法是建立物件,析構方法是銷燬物件