Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

Initializer Block ใน Java (Instance Initializer)

Initializer Block คืออะไร?

บล็อกโค้ดที่รันทุกครั้งที่สร้างอ็อบเจกต์ ก่อน constructor ใช้รวมโค้ดที่ซ้ำในทุก constructor (common initialization)

ตัวอย่าง


public class Demo {
    // Instance initializer block
    {
        System.out.println("Instance initializer block executed");
        // ทำ initialization ที่ซ้ำได้ที่นี่
    }
    
    // Default constructor
    public Demo() {
        System.out.println("Default constructor executed");
    }
    
    // Parameterized constructor
    public Demo(int x) {
        System.out.println("Parameterized constructor executed with x=" + x);
    }
    
    public static void main(String[] args) {
        System.out.println("Creating objects...");
        Demo obj1 = new Demo();
        System.out.println("---");
        Demo obj2 = new Demo(89);
    }
}

ผลลัพธ์

Creating objects...
Instance initializer block executed
Default constructor executed
---
Instance initializer block executed
Parameterized constructor executed with x=89

ลำดับการทำงาน

  1. Field initializers (การกำหนดค่า field ตรงๆ)
  2. Instance initializer blocks (ตามลำดับที่เขียน)
  3. Constructor body

Static Initializer Block

รันครั้งเดียวเมื่อ class โหลด (ก่อน main, ก่อนสร้าง instance)


public class Demo {
    static {
        System.out.println("Static initializer - runs once at class loading");
    }
    
    {
        System.out.println("Instance initializer - runs per instance");
    }
    
    public Demo() {
        System.out.println("Constructor");
    }
    
    public static void main(String[] args) {
        System.out.println("Main started");
        new Demo();
        new Demo();
    }
}

ผลลัพธ์

Static initializer - runs once at class loading
Main started
Instance initializer - runs per instance
Constructor
Instance initializer - runs per instance
Constructor

กรณีใช้งาน (Use Cases)

  • Initialization ซับซ้อนที่ constructor หลายตัวต้องทำซ้ำ
  • Anonymous class ที่ไม่มี constructor name ให้ overload
  • Exception handling ใน initialization (instance block 拋 checked exception ได้ ถ้าทุก constructor declare throws)