null の場合、静的メソッドを呼び出すことはできません。
それは可能です:
public final class Foo
{
public static void yuck()
{
System.out.println("Yuck!");
}
public static void main(final String... args)
{
final Foo foo = null;
foo.yuck(); // compiles, and does the job
}
}
直感に反するように思えるかもしれませんが、実際には静的メソッドはクラスを知っているだけで十分です。上記の例のようにのインスタンスが であってもFoo
、null
JVM はそれがクラス であることを認識しFoo
ます。yuck()
静的メソッドであるため、インスタンスを「逆参照」する必要がないため、インスタンスを「逆参照」しません。したがって、NPE はありません。
なぜ許可されているのですか?
これは正当な Java 識別子であるためです ( JLS、セクション 6.2 )。Java 識別子に対する唯一の制限は、キーワードにできないことです。
これが有益なユースケースはありますか?
あなたはおそらく自分でそれを理解することができます: できる限り努力してください('t), 私はあなたにそれを見つけることを拒否します ;)