Given the code fragment: (特定的一個程式代碼片段:)

public class Test {
 
    static int count = 0;
    int i = 0;
 
    public void changeCount() {
        while (i < 5) {
            ++i;
            count++;
        }
    }
 
    public static void main(String[] args) {
        Test check1 = new Test();
        Test check2 = new Test();
        check1.changeCount();
        check2.changeCount();
        System.out.println(check1.count + " : " + check2.count);
    }
}

What is the result? (結果是什麼?)

A.

10 : 10

B.

5 : 5

C.

5 : 10

D. Compilation fails (編譯失敗)

【題目解析】

「count」是類別(靜態)變數,就算Test類別被實體化成許多個物件,用來儲存「count」的記憶體空間也都還是一開始的那個。

check1和check2物件分別執行一次「changeCount」方法,將Test類別的「i」類別變數從0開始,

因為count為static靜態變數,是test所擁有的,所以check1執行了5次,check2也執行了5次,所以 加1總共加了10次,

所以最後「count」類別變數儲存的值為10,輸出「10 : 10」。

 

public class Test { //Test檔案名稱。
 
    static int count = 0; 宣告迴圈變數count。
    int i = 0;// 宣告迴圈變數i。
 
    public void changeCount() { //changeCount是一個方法名稱。
        while (i < 5) { // 當i值大於5即停止執行的while迴圈。
            ++i; //++i的意思是先執行i=i+1。
            count++; //count++的意思是先賦值(指定)運算,再執行count=count+1 的動作。
        }
    }
 
    public static void main(String[] args) {
        Test check1 = new Test();
        Test check2 = new Test();
        check1.changeCount();
        check2.changeCount();
        System.out.println(check1.count + " : " + check2.count);
    }
}

【補充說明】

1、public:修飾子,用來宣告類別或方法為公開存取。
2、class:用來宣告類別。
3、static:用來宣告為靜態方法。
4、void:用來宣告方法沒有傳回值用的。
5、main:這是一個方法的名稱。
6、(String[] args):宣告方法的參數為字串陣列,參數名稱為args,args可以任意命名。

【參考資料】

1Java SE8 OCAJP專業認證指南。

2Oracle Java SE 8 Programmer I 官方教材。

3網路上搜尋到的歷屆考古題。

【更新紀錄】

20190624

 

 

 

創作者介紹
創作者 寶堂軒 的頭像
大寶

寶堂軒

大寶 發表在 痞客邦 留言(0) 人氣( 105 )