【Java基礎-2】構造函數與構造代碼塊

構造函數與構造代碼塊

1 構造函數

構造函數是Java中的一個重要概念,它的作用是對對象的數據進行初始化。怎麼去理解呢?以新生入學爲例,我們當然可以在學生入學後去給他分配班級和學號,如果想讓一個新生一旦入學就擁有班級和學號呢?請看下面示例代碼:

public class Student {
    private long id;
    private String grade;

	// 無參構造方法
    public Student() {
    }

	// 有參構造方法
    public Student(long id, String grade) {
        this.id = id;
        this.grade = grade;
    }

	// 測試
    public static void main(String[] args) {
        Student student = new Student(26776, "三(2)班");
        Student student2 = new Student();
        System.out.println("第一個學生信息,班級:" + student.grade + ",學號:" + student.id);
        System.out.println("第二個學生信息,班級:" + student2.grade + ",學號:" + student2.id);

    }
}

輸出結果:

第一個學生信息,班級:三(2)班,學號:26776
第二個學生信息,班級:null,學號:0

如上面代碼所示,構造函數有如下格式

  • 方法名和類名相同
  • 沒有返回值類型,連void都不能有
  • 沒有返回值,當然構造函數中可以有return語句。其實,在任何的void類型的方法的最後你都可以寫上 return,但並沒有實質意義

構造方法的注意事項:

  • 如果我們沒寫構造方法,系統將提供一個默認的無參構造方法
  • 如果我們給出了構造方法,系統將不再提供默認構造方法,如果這個時候,我們還想使用無參構造方法,就必須自己給出
  • 在一個類中可以定義多個構造函數,以進行不同的初始化。多個構造函數存在於類中,是以重載的形式體現的。因爲構造函數的名稱都相同

構造函數與普通函數的區別

  • 一般函數是用於定義對象應該具備的功能。而構造函數定義的是,對象在調用功能之前,在建立時,應該具備的一些內容。也就是對象的初始化內容。
  • 構造函數是在對象建立時由 jvm 調用, 給對象初始化。一般函數是對象建立後,當對象調用該功能時纔會執行。
  • 普通函數可以使用對象多次調用,構造函數就在創建對象時調用。
  • 構造函數的函數名要與類名一樣,而普通的函數只要符合標識符的命名規則即可。
  • 構造函數沒有返回值類型。

2 構造代碼塊

構造代碼塊存在的意義在於提取多個構造方法中相同的代碼。每個構造方法執行前,會首先執行構造代碼塊。

public class Student {
    private long id;
    private String grade;

    public Student() {
    }

    public Student(long id, String grade) {
        this.id = id;
        this.grade = grade;
    }

	// 構造代碼塊
    {
        System.out.println("學生要學習");
    }

    public static void main(String[] args) {
        Student student = new Student(26776, "三(2)班");
        Student student2 = new Student();
        System.out.println("第一個學生信息,班級:" + student.grade + ",學號:" + student.id);
        System.out.println("第二個學生信息,班級:" + student2.grade + ",學號:" + student2.id);

    }
}

輸出結果:

學生要學習
學生要學習
第一個學生信息,班級:三(2)班,學號:26776
第二個學生信息,班級:null,學號:0

構造代碼塊屬於代碼塊一種,代碼塊還包括局部代碼塊和靜態代碼塊:

  • 局部代碼塊:用於限定變量的生命週期,及早釋放,提高內存利用率。
  • 構造代碼塊:把多個構造方法中相同的代碼可以放到這裏,每個構造方法執行前,首先執行構造代碼塊。
  • 靜態代碼塊:對類的數據進行初始化,僅僅只執行一次。

靜態代碼塊、構造代碼塊、構造方法的順序:靜態代碼塊 > 構造代碼塊 > 構造方法

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