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
ลำดับการทำงาน
- Field initializers (การกำหนดค่า field ตรงๆ)
- Instance initializer blocks (ตามลำดับที่เขียน)
- 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)