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

Static Control Flow ใน Java: ลำดับการทำงานของ Static Members

Static Control Flow (ลำดับควบคุม Static)

เมื่อ class ถูกโหลด (class loading) Static members ทำงานตามลำดับ:

  1. Static variables (field initializers) - ตามลำดับ宣告
  2. Static initializer blocks - ตามลำดับ宣告
  3. Static methods - เมื่อถูกเรียก

main method รันทีหลัง static initialization เสร็จสิ้น

ตัวอย่างแสดงลำดับ


public class Demo {
    static int a = 97;                    // 1. Static field initializer
    
    static {                              // 2. Static block #1
        System.out.println("a = " + a);   // 97
        print();                          // เรียก static method
        System.out.println("First static block");
    }
    
    static void print() {
        System.out.println("b = " + b);   // b ยังไม่ initialize → 0 (default)
    }
    
    static {                              // 3. Static block #2
        System.out.println("Second static block");
    }
    
    static int b = 899;                   // 4. Static field initializer
    
    public static void main(String[] args) { // 5. main method
        print();
        System.out.println("Main method completed");
    }
}

ผลลัพธ์

a = 97
b = 0
First static block
Second static block
b = 899
Main method completed

คำอธิบาย:

  • a=97 initialize ก่อน → พิมพ์ 97
  • Static block #1 เรียก print() → b ยังเป็น default 0
  • Static block #2 รัน
  • b=899 initialize
  • main เริ่มรัน เรียก print() อีกครั้ง → b เป็น 899 แล้ว

กฎสำคัญ

  • Static variable ใช้ได้ก่อนประกาศ (forward reference) แต่ได้ค่า default (0, null, false)
  • Static block ไม่สามารถใช้ this, super หรือ instance members ได้
  • ลำดับ: ตามที่เขียนใน source code (top to bottom)