Car.class - 是"类"变量吗?

dav*_*ine 4 java

Class c1 = Car.class;这是什么.class?它是一个存在于每个类中的公共变量吗?

Dan*_*rov 5

.class语法是一样的语法来访问静态字段,但它实际上不是一个静态字段; 这是一种特殊的语言功能.它类似于数组的length属性,它被视为一个字段但实际上并不存储为一个字段.

要查看差异,请考虑以下示例类:

class Test {
  public static Class<Test> myClass = Test.class;
}
Run Code Online (Sandbox Code Playgroud)

跑步javap Test

class Test {
  public static java.lang.Class<Test> myClass;
  Test();
  static {};
}
Run Code Online (Sandbox Code Playgroud)

如您所见,Test.myClass由于我们自己声明了它,因此存储为静态字段,但Test.class由于它实际上并未存储为静态字段,因此不会显示.