static 変数は全インスタンスで共有
出力はどれか。
public class Main {
public static void main(String[] args) {
new Counter();
Counter c = new Counter();
System.out.println(Counter.total + " " + c.mine);
}
}
class Counter {
static int total;
int mine;
Counter() {
total++;
mine++;
}
}
- A
2 1 - B
2 2 - C
1 1 - D コンパイルエラーになる
正解と解説を見る
正解: A
- A: static の total は全インスタンスで共有されて 2、インスタンス変数の mine は c だけのもので 1 です。
- B: mine はインスタンスごとに別々なので、c.mine は 1 です。
- C: total は static で共有されるので、2回の new で 2 になります。
- D: static 変数をクラス名で使うのは正しい書き方です。
ポイント
- static 変数はクラスに1つだけあり、全インスタンスで共有されます。インスタンス変数はインスタンスごとに別々です。