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

ลำดับการทำงาน Non-Static Block กับ Constructor ใน Java

เมื่อสร้างออบเจ็กต์ Non-Static Block (Instance Initializer Block) จะทำงาน ก่อน Constructor ทุกครั้ง

Non-Static Block (Instance Initializer)

  • บล็อกระดับคลาส ไม่มีชื่อ/พารามิเตอร์
  • รันทุกครั้งที่สร้างออบเจ็กต์ (new) ไม่ว่าจะเรียก Constructor ไหน
  • JVM เรียกอัตโนมัติใน Java Stack Area
  • สร้างได้หลายบล็อก ทำงานตามลำดับที่ประกาศ (Top-down)

ตัวอย่างโค้ด


public class NonStaticBlockTest {
    { 
        System.out.println("First Non-Static Block");  // 1st block
    }
    { 
        System.out.println("Second Non-Static Block"); // 2nd block
    }
    { 
        System.out.println("Third Non-Static Block");  // 3rd block
    }
    
    NonStaticBlockTest() {
        System.out.println("Execution of a Constructor"); // Constructor
    }
    
    public static void main(String args[]) {
        NonStaticBlockTest nsbt1 = new NonStaticBlockTest();
        NonStaticBlockTest nsbt2 = new NonStaticBlockTest();
    }
}

ผลลัพธ์


First Non-Static Block
Second Non-Static Block
Third Non-Static Block
Execution of a Constructor
First Non-Static Block
Second Non-Static Block
Third Non-Static Block
Execution of a Constructor

ลำดับการทำงานสมบูรณ์ (Full Initialization Order)

  1. Static Variables (ตามลำดับ)
  2. Static Blocks (ตามลำดับ)
  3. Instance Variables (ตามลำดับ)
  4. Non-Static Blocks (ตามลำดับ)
  5. Constructor (body)

Use Cases

  • Logic ที่ต้องรันทุกครั้งที่ new Object (Common initialization)
  • Anonymous Inner Class ที่ไม่มี Constructor
  • Complex initialization ที่ใช้ร่วมหลาย Constructor

Static vs Non-Static Block

คุณสมบัติStatic BlockNon-Static Block
ทำงานเมื่อClass Loading (ครั้งเดียว)Object Creation (ทุกครั้ง)
เข้าถึงได้Static members เท่านั้นStatic + Instance members
this/superใช้ไม่ได้ใช้ได้