Java 教程

Java 控制語句

面向物件程式設計

Java 內建類

Java 檔案處理

Java 錯誤和異常

Java 多執行緒

Java 同步

Java 網路程式設計

Java 集合

Java 介面

Java 資料結構

Java 集合演算法

高階 Java

Java 雜項

Java APIs 和框架

Java 類引用

Java 有用資源

Java - 例項初始化塊



Java 例項初始化塊

例項初始化塊是在內部宣告的一段程式碼塊,用於初始化例項資料成員。例項初始化塊為每個物件執行一次,可用於設定例項變數的初始值。

例項初始化塊類似於Java 建構函式,但其執行方式和用途不同。

Java 例項初始化塊示例

此示例演示 Java 中的例項初始化塊

public class Tester {
   public int a;
   { a = 10; }   
}

例項初始化塊的特性

  • 建立物件後,會呼叫一次例項初始化塊。

  • 在呼叫物件的任何建構函式之前,會呼叫例項初始化塊。

  • 對於子類,在呼叫超類建構函式之後,會呼叫例項初始化塊。

  • 例項初始化塊可用於執行多個語句。

  • 例項初始化塊通常用於例項化多個值欄位,例如陣列。

例項初始化塊的用途

以下是 Java 中例項初始化塊的用途:

  • 初始化例項變數。
  • 初始化程式碼中使用的資源。
  • 執行例項變數的動態初始化。
  • 對多個建構函式使用通用的初始化邏輯。

Java 例項初始化塊:更多示例

示例 1:演示首先呼叫的是例項初始化塊還是建構函式

在此示例中,我們演示了在物件建構函式之前執行例項初始化塊。使用 new 運算子建立物件時,會呼叫例項初始化塊和建構函式。

package com.tutorialspoint;
public class Tester {
   {
      System.out.println("Inside instance initializer block");
   }
   
   Tester(){
      System.out.println("Inside constructor");
   }
   
   public static void main(String[] arguments) {
      Tester test = new Tester();
   }
}

輸出

60
150

示例 2:演示建構函式是否覆蓋例項初始化塊

在此示例中,我們演示了在例項初始化塊中初始化的值將被物件建構函式覆蓋。使用 new 運算子建立物件時,會呼叫例項初始化塊和建構函式。

package com.tutorialspoint;
public class Tester {
   int a;
   {
      System.out.println("Inside instance initializer block");
      a = 10;
   }
   
   Tester(){
      System.out.println("Inside constructor");
      a = 20;
   }
   
   public static void main(String[] arguments) {
      Tester test = new Tester();
      System.out.println("Value of a: " + a);
   }
}

輸出

Inside instance initializer block
Inside constructor
Value of a: 20

示例 3:例項初始化塊和超類建構函式

在此示例中,我們演示了在子類例項初始化塊之前呼叫超類建構函式。我們建立了一個 SuperTester 類,Tester 類繼承自此類。在 main() 方法中,我們列印例項變數的值。在輸出中,您可以驗證呼叫的塊的順序。首先呼叫超類建構函式。然後呼叫子類例項初始化器,它初始化一個例項變數,然後呼叫子類的建構函式。

package com.tutorialspoint;
class SuperTester{
   SuperTester(){
      System.out.println("Inside super constructor");
   }
}

public class Tester extends SuperTester {
   int a;
   {
      System.out.println("Inside instance initializer block");
      a = 10;
   }

   Tester(){
      System.out.println("Inside constructor");
   }

   public static void main(String[] arguments) {
      Tester test = new Tester();
      System.out.println("Value of a: " + test.a);
   }
}

輸出

Inside super constructor
Inside instance initializer block
Inside constructor
Value of a: 10
廣告