Cho đoạn chương trình sau. Hãy cho biết chương trình có lỗi hay không, nếu có thì sửa chữa thế nào để chương trình có thể biên dịch:
class C3 {
private static int z = 10;
private int t = 100;
public static void main(String args[]) {
C3 obj1 = new C3();
obj1.z++;
obj1.t++;
C3.t--;
C3.z--;
System.out.println(" t = " + C3.t);
System.out.println(" z = " + z);
}
}
class C3 {
private static int z = 10;
private int t = 100;
public static void main(String args[]) {
C3 obj1 = new C3();
obj1.z++;
obj1.t++;
C3.t--;
C3.z--;
System.out.println(" t = " + C3.t);
System.out.println(" z = " + z);
}
}
private static int z = 10;
private int t = 100;
public static void main(String args[]) {
C3 obj1 = new C3();
obj1.z++;
obj1.t++;
C3.t--;
C3.z--;
System.out.println(" t = " + C3.t);
System.out.println(" z = " + z);
}
}
Trả lời:
Đáp án đúng: C
Chương trình có lỗi vì biến `t` là biến instance (không static) nên không thể truy cập thông qua tên class `C3`. Biến `z` là biến static (biến của lớp) nên có thể truy cập thông qua tên lớp hoặc đối tượng.
* **Dòng 8: `C3.t--;`** Đây là lỗi. Vì `t` là biến instance, nó thuộc về *đối tượng* của lớp `C3`, không phải bản thân lớp. Vì vậy, bạn phải truy cập nó thông qua một đối tượng, ví dụ `obj1.t--`.
* **Dòng 10: `System.out.println(" t = " + C3.t);`** Tương tự như trên, đây cũng là lỗi vì `t` là biến instance và phải được truy cập thông qua một đối tượng, ví dụ `obj1.t`.
Vậy, để sửa lỗi chương trình, ta cần sửa cả hai dòng 8 và 10 từ `C3.t` thành `obj1.t`.
* **Đáp án A sai:** Chỉ sửa dòng 8 không giải quyết được lỗi ở dòng 10.
* **Đáp án B sai:** Chỉ sửa dòng 10 không giải quyết được lỗi ở dòng 8.
* **Đáp án C đúng:** Sửa cả hai dòng 8 và 10 sẽ khắc phục được lỗi.
* **Đáp án D sai:** Chương trình có lỗi biên dịch.





