据我所知,每当一个类被加载时,JVM就会为它创建一个Class.class的对象,该JVM存储所有加载类的元信息。如何编写classname.class能够返回对java.lang.Class对象的引用?
当我们使用forName(“classname”)方法时,它首先加载“classname”,然后为它创建Class.class对象并返回对创建的Class.class对象的引用。
Example.java被给定为:
class Example
{
static
{
System.out.println("Example Loaded");
}
Example()
{
System.out.println("Example Constructed");
}
}
Use.java是:
import java.lang.reflect.*;
class Use
{
int i;
public static void main(String[] args) throws Exception
{
Class c = Class.forName("Example");
Constructor[] con = c.getDeclaredConstructors();
for(Constructor x: con)
{
System.out.println(x.getName());
}
}
}
运行Use.java输出:
Example Loaded
Example
的getClass()是一个方法,该方法只能用于物体。所以在创建对象之前,一定会加载一个类,并为其创建Class.class的对象。
据“类和数据”的http://www.onjava.com/pub/a/onjava/2005/01/26/classloading.html节,“每当我们编译任何Java文件,编译器将嵌入在发出一个公共的,静态的,最终的命名类别字段类型java.lang.Class的,字节码“。我们可以使用这个字段:以上代码的
import java.lang.reflect.*;
class Use
{
int i;
public static void main(String[] args) throws Exception
{
Class c = Example.class;
Constructor[] con = c.getDeclaredConstructors();
for(Constructor x: con)
{
System.out.println("Hello "+x.getName());
}
}
}
输出是:
Hello Example
例的静态身体得不到执行。意味着类的例子没有被加载。
我的疑问是:
如果类没有得到加载,然后也没有得到它创造Class.class的对象。然后从声明“Class c = Example.class”的语句中返回对Class.class的引用?
查看链接问题,您的类当您访问其静态字段时,示例未初始化 – AdamSkywalker