Java 中的建構函式

Java 中的建構函式是什麼?

建構函式 - Constructor 是一種特殊方法,用於初始化新建立的物件,並在為物件分配記憶體後立即呼叫。它可用於在建立物件時將物件初始化為所需的值或預設值。使用者可以不必為類編寫建構函式。

如果沒有為類提供使用者定義的建構函式,則編譯器會將成員變數初始化為其預設值。

  • 數字資料型別設定為 0
  • char 資料型別設定為空字元(\0
  • 引用變數設定為 null

在本教程中,你將學習 -

  • 什麼是 Java 中的建構函式?
  • 建立建構函式的規則
  • 建構函式過載
  • 構造連結

建立 Java 建構函式的規則

  1. 它與類同名
  2. 它不應該返回一個值甚至是 void

示例 1:建立你的第一個 Java 建構函式

步驟 1: 在編輯器中輸入以下程式碼。

class Demo{
      int  value1;
      int  value2;
      Demo(){
         value1 = 10;
         value2 = 20;
         System.out.println("Inside Constructor");
     }
 
     public void display(){
        System.out.println("Value1 === "+value1);
        System.out.println("Value2 === "+value2);
    }
 
   public static void main(String args[]){
       Demo d1 = new Demo();
      d1.display();
  }
}

步驟 2: 儲存、執行和編譯程式碼。觀察輸出。

輸出:

Inside Constructor
Value1 === 10
Value2 === 20

建構函式過載

建構函式過載是 Java 中的一種技術,其中一個類可以包含任意數量的引數列表中不同的建構函式。編譯器通過參考列表中的引數數量及其型別來區分這些建構函式。

Account 類的有效建構函式的示例是

Account(int a);
Account (int a,int b);
Account (String a,int b);

示例 2:瞭解建構函式過載

步驟 1: 在編輯器中輸入下面的程式碼。

class Demo{
      int  value1;
      int  value2;
      /*Demo(){
       value1 = 10;
       value2 = 20;
       System.out.println("Inside 1st Constructor");
     }*/
     Demo(int a){
      value1 = a;
      System.out.println("Inside 2nd Constructor");
    }
    Demo(int a,int b){
    value1 = a;
    value2 = b;
    System.out.println("Inside 3rd Constructor");
   }
   public void display(){
      System.out.println("Value1 === "+value1);
      System.out.println("Value2 === "+value2);
  }
  public static void main(String args[]){
    Demo d1 = new Demo();
    Demo d2 = new Demo(30);
    Demo d3 = new Demo(30,40);
    d1.display();
    d2.display();
    d3.display();
 }
}

步驟 2: 儲存、編譯和執行程式碼。

步驟 3: 錯誤出現後,在繼續下一步之前嘗試並除錯錯誤。

步驟 4: 每個類都有一個預設的建構函式。Demo 類的預設建構函式是 Demo()。如果你不提供此建構函式,編譯器會為你建立它並將變數初始化為預設值。你可以選擇覆蓋此預設建構函式並將變數初始化為所需的值,如示例 1 所示。

但是如果你指定一個像 Demo(int a) 這樣的引數化建構函式,並且想要使用預設建構函式 Demo(),那麼你必須指定它。換句話說,如果你的建構函式被覆蓋,並且你想使用預設建構函式,則需要指定它。

步驟 5: 取消註釋行#4-8。儲存、編譯和執行程式碼。

建構函式鏈

想一下一個子類由子類擴充套件的場景。每當建立子類的物件時,首先呼叫父類的建構函式。這稱為** Constructor chaining - 建構函式鏈**。

**示例 3:**瞭解建構函式鏈

步驟 1: 將以下程式碼複製到編輯器中。

class Demo{
   int  value1;
   int  value2;
    Demo(){
      value1 = 1;
      value2 = 2;
      System.out.println("Inside 1st Parent Constructor");
   }
   Demo(int a){
      value1 = a;
      System.out.println("Inside 2nd Parent Constructor");
   }
  public void display(){
     System.out.println("Value1 === "+value1);
     System.out.println("Value2 === "+value2);
  }
  public static void main(String args[]){
     DemoChild d1 = new DemoChild();
     d1.display();
  }
}
class DemoChild extends Demo{
    int value3;
    int value4;
    DemoChild(){
    //super(5);
     value3 = 3;
     value4 = 4;
    System.out.println("Inside the Constructor of Child");
    }
    public void display(){
      System.out.println("Value1 === "+value1);
      System.out.println("Value2 === "+value2);
      System.out.println("Value1 === "+value3);
      System.out.println("Value2 === "+value4);
   }
}

步驟 2: 執行程式碼。由於建構函式連結,當建立子類 DemoChild 的物件時,首先呼叫父類的建構函式 Demo(),然後建立子類的建構函式 DemoChild()。預期輸出為

Inside 1st Parent Constructor
Inside the Constructor of Child
Value1 === 1
Value2 === 2
Value1 === 3
Value2 === 4

步驟 3: 你可能會觀察到父類 Demo 的建構函式被覆蓋。如果要在建立子物件時呼叫重寫的建構函式 Demo(int a) 而不是預設建構函式 Demo(),該怎麼辦?

在這種情況下,你可以使用關鍵字** super **來呼叫父類的重寫建構函式。

語法:

super();
// or
super(parameter list);

**示例:**如果你的建構函式類似於 Demo(String Name,int a),你將指定 super("Java",5),如果使用,則為關鍵字 super 需要是子類的建構函式中的第一行程式碼。

步驟 4: 取消註釋 Line #26 並執行程式碼。觀察輸出。

輸出:

Inside 2nd Parent Constructor
Inside the Constructor of Child
Value1 === 5
Value2 === 0
Value1 === 3
Value2 === 4