0

クラスがあるとしましょうClassA

以下のように変数を宣言できます

public ClassA ClassA;

:- 変数名は型名と同じで、コンパイル エラーはありません。

これは、静的メソッドを呼び出したいときに混乱を招く可能性があります

ClassA.someStaticMethod();

上記のステートメントClassAでは、インスタンス変数として扱われ、null の場合、静的メソッドを呼び出すことはできません。

とにかく許可されているのはなぜですか?

これが有益なユースケースはありますか?

4

1 に答える 1

4

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
    }
}

直感に反するように思えるかもしれませんが、実際には静的メソッドはクラスを知っているだけで十分です。上記の例のようにのインスタンスが であってもFoonullJVM はそれがクラス であることを認識しFooます。yuck()静的メソッドであるため、インスタンスを「逆参照」する必要がないため、インスタンスを「逆参照」しません。したがって、NPE はありません。

なぜ許可されているのですか?

これは正当な Java 識別子であるためです ( JLS、セクション 6.2 )。Java 識別子に対する唯一の制限は、キーワードにできないことです。

これが有益なユースケースはありますか?

あなたはおそらく自分でそれを理解することができます: できる限り努力してください('t), 私はあなたにそれを見つけることを拒否します ;)

于 2013-07-20T16:27:47.170 に答える