クラス名を使用して静的メソッドを呼び出すことについて友人と話し合っていたところ、このコードを試してみて、実行時に NPE がスローされることを期待していましたが、実際にはそうではありませんでした。実行順序を理解したいだけです。
public class One {
public static void method() {
System.out.println("in static one");
}
}
public class Two {
static One o;
public static void main(String[] args) {
o.method(); // expected NPE here, as o is null
}
}
静的メソッドはクラス名で呼び出す必要があることを知っています。インスタンスで静的メソッドを呼び出すと、IDE がコンパイラの警告を出すことさえ知っています。ただし、インスタンスを作成してそれらを呼び出すこともできますが、ここでインスタンスを作成したことはなくo
、デフォルト値を null にするo.method()
必要があるため、実行時に NPE をスローする必要がありますが、そうではありません。このコードで実行順序がどのようになっているのかを教えてください。