null の変数から static 変数を使う
このコードを実行するとどうなるか。
public class Main {
public static void main(String[] args) {
Config c = null;
System.out.println(c.MAX);
}
}
class Config {
static int MAX = 100;
}
- A
100と出力される - B 実行時に例外が発生する
- C コンパイルエラーになる
- D
0と出力される
正解と解説を見る
正解: A
- A: static メンバは変数の型で決まり、インスタンスを使わないので、c が null でも 100 が出力されます。
- B: static 変数へのアクセスにはインスタンスが不要なので、null でも例外になりません。
- C: インスタンス経由 (null でも) で static 変数を使うことは文法上できます。
- D: MAX は 100 で初期化されています。
ポイント
- static メンバは 変数の型 (クラス) で決まり、インスタンスを使いません。そのため変数が null でも例外になりません。
- インスタンスメンバだったら NullPointerException です。