Java 为什么必须用类名限定对类的静态访问

Java 为什么必须用类名限定对类的静态访问,java,specifications,Java,Specifications,为什么必须在类中定义对类的引用?例如: public class Foo { private static Logger log = LoggerFactory.getLogger(Foo.class); } 既然我已经在Foo类的上下文中,为什么不能调用LoggerFactory.getLogger(class) 15.8.2. 类文字 类文字是一个表达式,由类、接口、数组或基元类型的名称或伪类型void组成,后跟“.”和标记class 允许class表达式应该允许您描述的语法,这不

为什么必须在类中定义对
类的引用
?例如:

public class Foo {
    private static Logger log = LoggerFactory.getLogger(Foo.class);
}
既然我已经在
Foo
类的上下文中,为什么不能调用
LoggerFactory.getLogger(class)

15.8.2. 类文字 类文字是一个表达式,由类、接口、数组或基元类型的名称或伪类型void组成,后跟“.”和标记
class

允许
class
表达式应该允许您描述的语法,这不会使语言变得模棱两可,但它会覆盖关键字
class
,以表示两者

  • 一种宣言
  • 类型的实例的引用
  • 您建议的语法可能允许命名匿名类的类,但是
    getClass()
    在匿名类中具有相同的含义

    去掉两个标记(非限定的类名和
    )并不能提供太多的价值,而且可能会在内部类中造成混乱。例如,lambda表达式中的
    类是什么

    15.8.2. 类文字 类文字是一个表达式,由类、接口、数组或基元类型的名称或伪类型void组成,后跟“.”和标记
    class

    允许
    class
    表达式应该允许您描述的语法,这不会使语言变得模棱两可,但它会覆盖关键字
    class
    ,以表示两者

  • 一种宣言
  • 类型的实例的引用
  • 您建议的语法可能允许命名匿名类的类,但是
    getClass()
    在匿名类中具有相同的含义


    去掉两个标记(非限定的类名和
    )并不能提供太多的价值,而且可能会在内部类中造成混乱。例如,lambda表达式中的
    class
    是什么?

    这就是语言的定义方式。Foo.class是一个类文本(请参阅oracle文档)。您的语法可能有意义,但它不是Java语言的一部分。这就是语言的定义方式。Foo.class是一个类文本(请参阅oracle文档)。您的语法是有意义的,但它不是Java语言的一部分。