
Initialization block
2021, Aug 24
- Initialization block là khối code không thuộc method nào, được thực thi trước contructor của class. Mỗi lần khởi tạo đối tượng sẽ được gọi 1 lần.
public class InitializationBlockExample {
public InitializationBlockExample() {
System.out.println("Contructor 1");
}
{
System.out.println("Initialization block 1");
}
public static void main(String[] args) {
InitializationBlockExample ibe = new InitializationBlockExample();
}
}
Output:
Initialization block 1
Contructor 1
Initialization block 1
Contructor 1
- Nếu có 2 block thì thứ tự thực thi theo thứ tự xuất hiện (thứ tự code từ trên xuống).
public class InitializationBlockExample {
public InitializationBlockExample() {
System.out.println("Contructor 1");
}
{
System.out.println("Initialization block 1");
}
{
System.out.println("Initialization block 2");
}
public static void main(String[] args) {
InitializationBlockExample ibe = new InitializationBlockExample();
}
}
Output:
Initialization block 1
Initialization block 2
Contructor 1
- Static initialization block tương tự như sử dụng static, được thực thi trước initialization block. Và chỉ được thực thi 1 lần duy nhất.
public class InitializationBlockExample {
static {
System.out.println("Static initialization block 1");
}
public InitializationBlockExample() {
System.out.println("Contructor 1");
}
{
System.out.println("Initialization block 1");
}
{
System.out.println("Initialization block 2");
}
public static void main(String[] args) {
InitializationBlockExample ibe = new InitializationBlockExample();
}
}
Output:
Static initialization block 1
Initialization block 1
Contructor 1
Initialization block 1
Contructor 1
Thứ tự: Static initialization block -> Super initialization block -> Contructor
Source code ở đây