1日1問、Java Silver試験対策に役立つ練習問題を解きましょう。
問題
次のプログラムを実行した場合、最終的に出力される値はどれでしょうか?正しい選択肢を選んでください。
class Counter {
static int count = 0;
Counter() {
count++;
}
}
public class Main {
public static void main(String[] args) {
Counter c1 = new Counter();
Counter c2 = new Counter();
Counter c3 = new Counter();
System.out.println(Counter.count);
}
}
選択肢
- A. 0
- B. 1
- C. 2
- D. 3
答えと解説
回答を見る
答え
D. 3
解説
解説のポイント:
- 静的フィールドの理解
- コンストラクタによるフィールドの変更
- インスタンス生成の効果
- 静的アクセス
まず、Counter
クラスの静的フィールドcount
はクラス単位で管理されます。静的フィールドは、クラスのインスタンスに関わらず共有されるため、どのCounter
オブジェクトからでも同じcount
フィールドを参照します。
次に、このプログラムではCounter
オブジェクトが3つ生成されます。それぞれのオブジェクトが生成されるたびに、Counter
クラスのコンストラクタが呼び出され、count
が1ずつ増加します。したがって、合計でcount
は3になります。
最後に、静的フィールドはクラス名を通してアクセスすることが推奨されます。このため、System.out.println(Counter.count);
という形で正しくアクセスされています。この部分も静的な特性に基づいて正しい理解が求められます。
この問題では、ポリモーフィズムの間違いや静的フィールドの誤用といった基礎的なつまずきポイントをテストしています。コンストラクタの呼び出しごとに変数がどのように操作されるかを理解しておくと、多くのプログラミング場面で役立ちます。