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

Java ObjectClass.class变量在哪里定义/初始化?,java,class,Java,Class,考虑下面的示例代码 public class Test { public static void main(String args[]) { Test t = new Test(); Class c2 = Test.class; System.out.println(c2); } } Test.class静态计算并返回编译时类对象。查看Test.class语法,看起来变量类属于类型java.lang.class,并且是静态

考虑下面的示例代码

 public class Test {

    public static void main(String args[]) {

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

    }
}
Test.class
静态计算并返回编译时类对象。查看
Test.class
语法,看起来变量类属于
类型java.lang.class,并且是静态和公共的
。我的问题是这个变量是在哪里定义的?它不在测试类中(因为我没有声明它),也不在java.lang.Object类中

我看到了一个类似的方法
public final本机类getClass()。这出现在
java.lang.Object
中,是一种
本地java方法
。此方法返回对象的运行时类

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

这些被称为类文本,由语言本身根据定义(没有“
class
member”):

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

C.class
的类型是
class
,其中
C
是类、接口或数组类型(§4.3)的名称

p.class
的类型,其中
p
是基本类型的名称(§4.2),是
class
,其中
B
是装箱转换后
p
类型表达式的类型(§5.1.7)

void.class
(§8.4.5)的类型为
class

有一个迹象表明,这些结构本质上是内置在语言中的,那就是它们甚至可以与原语一起工作

System.out.println(int.class);
System.out.println(double.class);
// etc.

class
不是正常的静态变量。它是一种在编译时被替换的语言结构


由于
class
是一个关键字,因此甚至不可能用该名称声明变量。

您对
class
是class
class
的静态字段的假设是不准确的。假设这是正确的。在这种情况下,对于所有错误的类,此字段的值将完全相同

虽然
MyClass.class
在语法上看起来像是对静态字段的访问,但它只是语言的一种特殊语法。把它看作一种操作符


可能JVM创建了某种合成类,它封装了真实的类并具有这样的字段,但这只是JVM中类的内部表示的一个假设

它是语言的一部分,没有在任何地方的代码中定义。“它看起来像变量
class
的类型是
java.lang.class
,是
static
public
”,它当然看起来像一个字段,但它不是。