Khi một đối tượng được tạo, non-static block (khối không tĩnh) sẽ được thực thi trước constructor.
Non-Static Blocks (Instance Initialization Blocks)
- Là khối cấp độ lớp (class-level) không có prototype (không tên, không tham số, không kiểu trả về).
- Mục đích: thực thi logic bất cứ khi nào đối tượng được tạo, riêng biệt với constructor nào được gọi.
- JVM tự động gọi cho mỗi lần tạo đối tượng trong java stack area.
- Có thể tạo bất kỳ số lượng non-static block.
- Thứ tự thực thi theo thứ tự định nghĩa trong code (từ trên xuống dưới).
Ví dụ minh họa
public class NonStaticBlockTest {
{
System.out.println("First Non-Static Block"); // first non-static block
}
{
System.out.println("Second Non-Static Block"); // second non-static block
}
{
System.out.println("Third Non-Static Block"); // third non-static block
}
NonStaticBlockTest() {
System.out.println("Execution of a Constructor"); // Constructor
}
public static void main(String args[]) {
NonStaticBlockTest nsbt1 = new NonStaticBlockTest();
NonStaticBlockTest nsbt2 = new NonStaticBlockTest();
}
}
Kết quả đầu ra
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
Quy trình khởi tạo đối tượng đầy đủ
- Static variables & static blocks (lần đầu load class)
- Instance variables & non-static blocks (theo thứ tự code)
- Constructor (constructor body)
Ứng dụng: Non-static block dùng để khởi tạo chung cho nhiều constructor (tránh trùng code), hoặc logic phức tạp trước khi constructor chạy.