Java - Hãy chọn đáp án thể hiện kết quả đúng của đoạn chương trình cho sẵn dưới đây.

Bài tập này yêu cầu chúng ta hãy chọn đáp án thế hiện kết quả đúng của đoạn chương trình cho sẵn dưới đây, giải thích vì sao có kết quả đó và sử dụng Eclipse để kiểm chứng.

W.java
package baitap;

public class W {

	static int c = 0;

	public static void main(String[] args) {
		W w1 = c();
		W w2 = c(w1);
		W w3 = c(w2);
		W w4 = c(w3);
	}

	private W() {
		System.out.println("c = " + c);
	}

	static W c() {
		return c++ <= 0 ? new W() : null;
	}

	static W c(W w) {
		return w.c++ == 1 ? new W() : null;
	}

}

A

c = 1

c = 2

B

c = 1

c = 2

c = 3

C

c = 1

c = 2

c = 3

c = 4

D Lỗi biên dịch

Bài giải

-------------------- ######## --------------------

Đáp án: A

Giải thích:

Trong đoan chương trình trên, chúng ta có biến tĩnh c với giá trị khởi tạo = 0.

Trong hàm main(), chúng ta có dòng code W w1 = c(); để khởi tạo đối tượng w1, phương thức c() lúc này sẽ kiểm tra nếu c <= 0 thì sẽ tạo 1 đối tượng của W, ngược lại trả về null, ở trường hợp này sẽ trả về w1 = new W(); (c++ là toán tử postfix nên thực hiện trước rồi mới tăng nên c lúc này = 0 thỏa điều kiện, sau đó tăng c lên 1). w1 = new W(); sẽ hiển thị giá trị của c sau khi tăng lên 1: c = 1.

Dòng code W w2 = c(w1); sẽ khởi tạo đối tượng w2, phương thức c(w1) lúc này sẽ kiểm tra nếu w1.c == 1 thì sẽ tạo 1 đối tượng của W, ngược lại trả về null, ở trường hợp này sẽ trả về w2 = new W(); (w1.c = 1 thỏa điều kiện, sau đó tăng c lên 1). w2 = new W(); sẽ hiển thị giá trị của c sau khi tăng lên 1: c = 2.

Tiếp theo, dòng code W w3 = c(w2); sẽ khởi tạo đối tượng w3, phương thức c(w2) lúc này sẽ kiểm tra nếu w2.c == 1 thì sẽ tạo 1 đối tượng của W, ngược lại trả về null, ở trường hợp này sẽ trả về w3 = null (w2.c = 2 > 1). Sau đó c tăng lên 1 và bằng 3.

Cuối cùng, dòng code W w4 = c(w3); sẽ khởi tạo đối tượng w4, phương thức c(w3) lúc này sẽ kiểm tra nếu w3.c == 1 thì sẽ tạo 1 đối tượng của W, ngược lại trả về null, ở trường hợp này sẽ trả về w4 =  null (w3.c = 3 > 1). Đến đây chương trình kết thúc.

Kết quả biên dịch chương trình bằng Eclipse:

 

Nguồn: freetuts.net