Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Các hạn chế trên static method và static block trong Java

Static Method

Thuộc về class, load cùng class, gọi qua ClassName.method() không cần object.

Hạn chế

  • Không truy cập được non-static member (instance variable, instance method) trực tiếp. Phải qua object reference.
  • Không dùng this và super (vì không có instance).
  • Chỉ truy cập được static data (static variable, static method).
  • Không thể override (chỉ có method hiding - định nghĩa lại static method cùng signature ở subclass).

Static Block

Khối code chạy 1 lần khi class load, trước main. Dùng để init static field phức tạp.

Hạn chế

  • Không return giá trị được.
  • Không gọi trực tiếp được (JVM tự chạy khi load class).
  • Ném checked exception không được → phải try-catch bên trong block.
  • Không dùng this, super.
  • Thứ tự chạy cố định: Theo thứ tự khai báo trong source code, không kiểm soát động được.

Ví dụ minh họa

public class StaticRestrictions {
    static int count = 0;
    int instanceVar = 10;
    
    static {
        System.out.println("Static block 1");
        count = 100; // OK
        // instanceVar = 20; // LỖI: không truy cập non-static
    }
    
    static {
        System.out.println("Static block 2 - count = " + count);
    }
    
    public static void staticMethod() {
        System.out.println("Static method");
        // this.instanceVar = 30; // LỖI: không dùng this
        // instanceMethod(); // LỖI: không gọi non-static method
    }
    
    public void instanceMethod() {
        staticMethod(); // OK: instance gọi static được
        System.out.println("Instance method");
    }
    
    public static void main(String[] args) {
        StaticRestrictions.staticMethod();
        new StaticRestrictions().instanceMethod();
    }
}

Output:

Static block 1
Static block 2 - count = 100
Static method
Static method
Instance method