0

假设我有课ClassA

我可以如下声明一个变量

public ClassA ClassA;

注意:- 变量名称与类型名称相同,并且没有编译错误。

当您想要调用静态方法时,这可能会导致混淆

ClassA.someStaticMethod();

在上述语句ClassA中将被视为实例变量,如果它为空,则无法调用静态方法。

为什么还是允许的?

是否有任何可能有益的用例?

4

1 回答 1

4

如果为空,则无法调用静态方法。

可能

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

尽管这看起来违反直觉,但事实是静态方法只需要知道;即使Foois的实例null,就像上面的示例一样,JVM 也知道它是 class Fooyuck()作为静态方法,它不会“取消引用”实例,因为它不需要;因此,没有 NPE。

为什么允许?

因为这是一个合法的 Java 标识符(JLS,第 6.2 节)。Java 标识符的唯一限制是它们不能是关键字。

是否有任何可能有益的用例?

您可能可以自己解决:尽您所能(不),我不让您找到一个;)

于 2013-07-20T16:27:47.170 回答