Open Jacobvu84 opened 6 years ago
Bởi vì ngôn ngữ lập trình Java có thể chạy đa luồng (multithreaded) nên việc khởi tạo các giá trị cần phải được đồng bộ ( có trình tự) một cách chính xác.
Trong câu hỏi trên trình tự thực hiện các lệnh sẽ là
1a - Biến tĩnh (Field static) của SubClass ( lớp cha) // 3 1b - Phần block code của SubClass // 8 2a - Phần block code của SupClass ( lớp con ) // 4 2b - Biến tĩnh (Field static) của SupClass // 9 3 - Các lệnh trong hàm main() trước khi khai báo đối tượng // 8 4 - Các biến non-static của SubClass // 4 5 - Hàm khởi tạo ( contrustor) của SubClass // 3 6 - Các biến non-static của SupClass // 0 7 - Hàm khởi tạo ( contrustor) của SupClass // 3 8 - Phần còn lại của main (..)
Và kết quả cuối cùng là : 3849843031
Một ví dụ khác
public class CheckPriori {
public static void main(String[] args) {
Parent a = new Parent();
System.out.println(a.getA());
}
}
class Parent {
private static int a = 4; // (1)
public int getA() {
return a;
}
static {
a = 9; // (2)
}
public Parent() {
a = 6; // (3)
}
}
Theo trình tự thì biến sẽ được khởi tạo trước (1), rồi tới static block code ( hoặc block code ) (2) và cuối cùng mới tới hàm khởi tạo. Kết quả của ví trên sẽ in ra 6
SubClass
SupClass:
And
Chương trình sẽ in ra cái gì và tại sao ?