ObjectClass.class变量在哪里定义/初始化?

Ani*_*kur 4 java class

考虑下面的示例代码

 public class Test {

    public static void main(String args[]) {

        Test t = new Test();
        Class c2 = Test.class;
        System.out.println(c2);

    }
}
Run Code Online (Sandbox Code Playgroud)

Test.class静态计算并返回编译时Class对象.看一下Test.class它看起来像变量类的语法type java.lang.Class and is static and public.我的问题是这个变量定义在哪里?它在Test类中不存在(因为我没有声明它),它也不在java.lang.Object类中.

我看到了一个类似的方法public final native Class<?> getClass();.这存在于java.lang.Object并且是native java method.此方法返回对象的运行时类.

所以我的问题是这个公共和静态类变量定义在哪里?(如果我错了,请纠正我)是否是一些原生实现?这是在编译时设置的,静态不需要创建类实例.所以即使这是一些本机实现,它是由registerNatives()java.lang.Object中的方法初始化的吗?

ars*_*jii 5

这些被称为类文字,并根据JLS§15.8.2(没有" class成员")由语言本身定义:

类文字是由类,接口,数组或基本类型或伪类型的名称的表达void,随后是"" 和令牌class.

类型C.class,C类,接口或数组类型(第4.3节)的类型是Class<C>.

类型p.class,其中p是基本类型的名称(第4.2节)Class<B>,其中,Bp在装箱转换后的类型表达式的类型(第5.1.7节).

void.class(§8.4.5)的类型是Class<Void>.

这些结构本质上构建在语言中的一个迹象是它们甚至可以与原语一起使用!

System.out.println(int.class);
System.out.println(double.class);
// etc.
Run Code Online (Sandbox Code Playgroud)