Java 中使用靜態塊的建構函式過載


例項化物件的行為會呼叫其對應的建構函式,這是面向物件程式設計中許多功能的基礎。值得注意的是,在任何使用物件的程式中都始終存在一個預設建構函式——由編譯器無縫建立,方便使用。

在本討論中,我們將深入探討在 Java 中使用靜態塊的建構函式過載。建構函式過載是在一個類中定義多個具有不同引數的建構函式的概念。

語法

Public class class_name {
   Class_name() {
   }
   Class_name(par1, par2..) {
   }
}

使用帶有靜態塊的建構函式可以在物件初始化期間提供更多功能和靈活性。

演算法

使用靜態塊的建構函式過載,請按照以下步驟操作:

  • 步驟 1 - 建立一個具有多個具有不同引數的建構函式的類。

  • 步驟 2 - 使用“static”關鍵字建立一個靜態塊

    此塊將在類載入到記憶體中時執行一次。

  • 步驟 3 - 載入類時,將首先執行靜態塊,然後在建立物件時執行建構函式。

  • 步驟 4 - 將根據提供的引數呼叫建構函式。

方法 1:定義單獨的靜態塊

此方法涉及分別定義靜態塊和過載的建構函式。

示例

Class Class_name{
   Static {
   }
   Public class_name(){
   }
   Public class_name(int value) {
   }
   Public class_name(string name) {
   }
   //Other methods
}

在此方法中,類可以具有引數列表不同的過載建構函式,這些建構函式還包括初始化程式碼。還有一個單獨的靜態塊用於類的靜態初始化。此塊將執行一次。

示例

在此示例中,我們將演示方法 1

class Emp { int id, exp;String name;static String company;
   static { company = "XYZ Corp"; }
   public Emp(){
      System.out.println("-"
                           + "\t"
                           + "-"
                           + "\t"
                           + "-"
                           + "\t"
                           + "\t"
                           + "-"); }
   public Emp(int id, String name){ System.out.println(id + "\t" + name + "\t"
                           + company + "\t" + exp); }
   public Emp(int id, String name, int exp) {
      System.out.println(id + "\t" + name + "\t"  + company + "\t" + exp); }
}
public class Way2Class {
   public static void main(String[] args) {
      System.out.println("Id"
                           + "\t"
                           + "Name"
                           + "\t"
                           + "Company"
                           + "\t"
                           + "Exp");
      Emp obj1 = new Emp(001, "Apoorva");
      Emp obj2 = new Emp(004, "Anu", 10);
      Emp obj3 = new Emp();
   }
}

輸出

Id	Name	Company	Exp
1	Apoorva	XYZ Corp	0
4	Anu	XYZ Corp	10
-	-	-		-

解釋

在一間公司裡,任何工齡的員工都在同一家公司。因此,如果公司變數中沒有傳入值,則會自動使用同一家公司名稱設定公司名稱。為此,我們使用了靜態塊。

方法 2:從建構函式呼叫靜態方法

要執行共享的初始化程式碼,可以在類中宣告靜態方法,並從建構函式中呼叫它們。

示例

public class Way2Class {
   private int value;
   private String name;

   private static void initialize() {
      System.out.println("Common initialization code");
   }

   public Way2Class() {
      initialize();
      value = 0;
      name = "Default";
      System.out.println("No-arg constructor called");
   }

   public Way2Class(int value) {
      initialize();
      this.value = value;
      name = "Value";
      System.out.println("Int constructor called");
   }

   public Way2Class(String name) {
      initialize();
      value = 0;
      this.name = name;
      System.out.println("String constructor called");
   }

   public static void main(String[] args) {
      Way2Class obj1 = new Way2Class();
      Way2Class obj2 = new Way2Class(10);
      Way2Class obj3 = new Way2Class("Hello");
   }
}

輸出

Common initialization code
No-arg constructor called
Common initialization code
Int constructor called
Common initialization code
String constructor called

解釋

此圖例中的 Way2Class 類包含三個建構函式,每個建構函式都呼叫靜態 initialize() 方法來執行共享的初始化程式碼。每個建構函式都呼叫在類中指定的靜態函式 initialize()。在建立物件時,將根據提供的引數呼叫相應的建構函式,並使用靜態方法 initialize() 執行公共初始化程式碼。

方法 1 和方法 2 的比較

標準

方法 1

方法 2

型別

單獨的靜態塊

從建構函式呼叫靜態方法

方法

使用不同的建構函式重用公共靜態方法。

使用公共建構函式的單獨靜態方法。

方法邏輯

使用靜態塊的建構函式過載

使用靜態塊的建構函式過載

結論

雖然方法 2(從建構函式呼叫靜態方法)在程式碼組織和繼承方面提供了更大的靈活性,但方法 1(具有公共程式碼的多個建構函式)更獨立且更簡單。兩種方法的選擇取決於專案的具體要求和設計考慮。

更新於:2023年8月1日

411 次瀏覽

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告