gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 02:10:53 25 4
gpt4 key购买 nike

考虑下面的示例代码

 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语法看起来变量类是type java.lang.Class and is static and public .我的问题是这个变量在哪里定义的?它不存在于 Test 类中(因为我没有声明它),也不存在于 java.lang.Object 类中。

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

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

最佳答案

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

A class literal is an expression consisting of the name of a class, interface, array, or primitive type, or the pseudo-type void, followed by a '.' and the token class.

The type of C.class, where C is the name of a class, interface, or array type (§4.3), is Class<C>.

The type of p.class, where p is the name of a primitive type (§4.2), is Class<B>, where B is the type of an expression of type p after boxing conversion (§5.1.7).

The type of void.class (§8.4.5) is Class<Void>.

这些结构本质上内置于语言中的一个迹象是它们甚至可以使用原语!

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

关于java - ObjectClass.class 变量在哪里定义/初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18684894/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com