假设我有课ClassA
我可以如下声明一个变量
public ClassA ClassA;
注意:- 变量名称与类型名称相同,并且没有编译错误。
当您想要调用静态方法时,这可能会导致混淆
ClassA.someStaticMethod();
在上述语句ClassA
中将被视为实例变量,如果它为空,则无法调用静态方法。
为什么还是允许的?
是否有任何可能有益的用例?
假设我有课ClassA
我可以如下声明一个变量
public ClassA ClassA;
注意:- 变量名称与类型名称相同,并且没有编译错误。
当您想要调用静态方法时,这可能会导致混淆
ClassA.someStaticMethod();
在上述语句ClassA
中将被视为实例变量,如果它为空,则无法调用静态方法。
为什么还是允许的?
是否有任何可能有益的用例?
如果为空,则无法调用静态方法。
有可能:
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
is的实例null
,就像上面的示例一样,JVM 也知道它是 class Foo
;yuck()
作为静态方法,它不会“取消引用”实例,因为它不需要;因此,没有 NPE。
为什么允许?
因为这是一个合法的 Java 标识符(JLS,第 6.2 节)。Java 标识符的唯一限制是它们不能是关键字。
是否有任何可能有益的用例?
您可能可以自己解决:尽您所能(不),我不让您找到一个;)