構造方法

1.一個類中至少有一個構造方法,若是沒有定義的話,編譯器會自動爲其定義一個無參的構造方法 ,它是定義在java類中的一個用來初始化對象的函數。可是須要注意的是,一旦你定義了其它任何構造方法,系統就不會爲你添加空的構造方法了。

2.所謂構造方法,就是把本身構形成一個對象。提及來,若是你想new一個新的對象,那麼你就要首先調用構造方法,經過構造方法來new出一個新對象。因此 new + 構造方法, 這樣就建立了一個新的對象。

3.構造方法的名字必須和類名徹底同樣,沒有返回值。前面不能加任何void, int等等的東西,切記這一點,不然這個方法就不是構造方法,而是普通的方法。

4.在繼承的時候,父類固然也有構造方法,若是你要建立子類的對象,那麼執行的過程首先是調用父類的無參構造方法生成父類的對象,而後再調用子類的無參構造方法來生成子類對象。

那麼,假如父類沒有無參的構造方法,好比說父類定義了有參構造方法,那麼編譯器就不會自動爲其生成一個無參的,那就找不到,就生成不了。要解決這個問題,就使用super關鍵字,使用super(括號裏面是構造方法的參數)。這樣就能夠解決。java

總之,不管如何,繼承的時候都是先生成父類的對象,而後再生成子類的對象。函數

5.經過使用this關鍵字帶上參數,能夠在一個構造函數中調用另一個構造函數。這是this除了單純表示"當前對象"(注意是針對對象而不是類的概念)以外的第二個做用。this

可是注意3點:spa

第一點,必須放在第一行。對象

第二點,只能調用一個其它的構造函數。(也許能夠這樣理解,正是由於有了第一點,若是能夠調用多個的話,那麼就沒法放在"第一行",因此只能容許一次調用)繼承

第三點,只能是構造函數調用構造函數,普通函數沒法調用構造函數。編譯器

6.尤爲須要注意的是,構造方法會在成員變量以後初始化。舉個簡單的例子,編譯

...class

public static void main(String[] args){變量

    Person p = new Person();

}

public class Person {

    Person p1 = new Person (1);

    Person (){

        print("constructor");

    }

    Person p2 = new Person (2);

}

 

public class Person {

    Person (int i){

    System.out.println("Person "+i);

}

}

上面的例子輸出結果是,Person 1, Person 2, constructor

因此,不管成員變量的位置在哪,都會先初始化成員變量,而後纔是構造函數。

相關文章
相關標籤/搜索