在Java中,您可以编写以下代码:
Class<?> stringClass = String.class;
运行时将分配对Class实例的引用,表示类型为java.lang.String类。
我的问题是:
getClass()
或Type.class
或者当类加载器第一次加载Java类型时。)Type.class
时会发生什么。我问,因为在课程代码中没有名为class
的静态成员。答案 0 :(得分:1)
Class
个对象是
因为你只有一个ClassLoader
,所以是唯一的。不同
ClassLoaders
可以为同一个产生不同的Class
个对象
课程定义。Class
个对象
ClassLoader
,通常在首次引用该类时。Type.class
是类文字,因此不会调用任何内容; class literal引用Class
对象。从上面链接的部分引用JLS:
类文字是一个由类名称组成的表达式, 接口,数组或基本类型,或伪类型void 一个'。'和令牌类。
和
类文字计算命名类型的Class对象(或 for void)由类的定义类加载器(第12.2节)定义 当前实例。
答案 1 :(得分:1)
似乎表达式Foo.class
被编译为常量池的简单查找,至少在javac7上。因此,在加载此类时,可能会加载Foo.class
。
我记得在旧版本的Java中并非如此; Foo.class
被编译成类似Class.forName("Foo")
的内容,并且加载非常懒惰并且按需提供。