Chọn phát biểu đúng cho chương trình sau:
class HasStatic {
private static int x = 100;
public static void main(String[] args) {
HasStatic hs1 = new HasStatic();
hs1.x++;
HasStatic hs2 = new HasStatic();
hs2.x++;
hs1 = new HasStatic();
hs1.x++;
HasStatic.x++;
System.out.println("x = " + x);
}
};
class HasStatic {
private static int x = 100;
public static void main(String[] args) {
HasStatic hs1 = new HasStatic();
hs1.x++;
HasStatic hs2 = new HasStatic();
hs2.x++;
hs1 = new HasStatic();
hs1.x++;
HasStatic.x++;
System.out.println("x = " + x);
}
};
private static int x = 100;
public static void main(String[] args) {
HasStatic hs1 = new HasStatic();
hs1.x++;
HasStatic hs2 = new HasStatic();
hs2.x++;
hs1 = new HasStatic();
hs1.x++;
HasStatic.x++;
System.out.println("x = " + x);
}
};
Trả lời:
Đáp án đúng: C
Biến `x` là biến static, nghĩa là nó thuộc về class `HasStatic` chứ không phải thuộc về từng instance của class đó. Do đó, tất cả các instance của `HasStatic` đều dùng chung một biến `x`.
Ban đầu, `x` được khởi tạo là 100.
* `hs1 = new HasStatic();` // Tạo instance hs1, x = 100
* `hs1.x++;` // Tăng x lên 1, x = 101
* `hs2 = new HasStatic();` // Tạo instance hs2, x = 101
* `hs2.x++;` // Tăng x lên 1, x = 102
* `hs1 = new HasStatic();` // Tạo instance hs1 mới, x = 102
* `hs1.x++;` // Tăng x lên 1, x = 103
* `HasStatic.x++;` // Tăng x lên 1, x = 104
* `System.out.println("x = " + x);` // In ra giá trị của x
Vậy, chương trình sẽ in ra `x = 104`.





