Không, chúng ta không thể định nghĩa static constructor trong Java. Nếu cố định nghĩa constructor với từ khóa static, sẽ xảy ra lỗi compile-time.
Nói chung, static mang ý nghĩa cấp độ lớp (class-level). Constructor dùng để gán giá trị khởi tạo cho biến instance (biến thể hiện). Cả hai static và constructor là khái niệm khác nhau và đối lập. Cần gán giá trị cho biến instance → dùng constructor. Cần gán giá trị cho biến static → dùng Static Blocks (khối tĩnh).
Ví dụ minh họa lỗi
public class StaticConstructorTest {
int x = 10;
// Khai báo Static Constructor - SAI
static StaticConstructorTest() {
System.out.println("Static Constructor");
}
public static void main(String args[]) {
StaticConstructorTest sct = new StaticConstructorTest();
}
}
Code trên không compile được, báo lỗi: "modifier static not allowed here".
Kết quả đầu ra (lỗi compile)
StaticConstructorTest.java:4: error: modifier static not allowed here
Thay thế đúng: Static Block
public class StaticBlockExample {
static int count;
// Static block - chạy 1 lần khi load class
static {
count = 100;
System.out.println("Static block executed, count = " + count);
}
public StaticBlockExample() {
System.out.println("Constructor called");
}
public static void main(String[] args) {
new StaticBlockExample();
new StaticBlockExample();
}
}
Kết quả
Static block executed, count = 100 Constructor called Constructor called
Tóm tắt: Static block chạy 1 lần khi nạp lớp. Constructor chạy mỗi lần new. Không có static constructor trong Java.