一、了解Class对象生成过程
1、Class类
public final class Class<T> implements java.io.Serializable,
GenericDeclaration,
Type,
AnnotatedElement {
private static final int ANNOTATION= 0x00002000;
private static final int ENUM = 0x00004000;
private static final int SYNTHETIC = 0x00001000;
private static native void registerNatives();
static {
registerNatives();
}
/*
* Private constructor. Only the Java Virtual Machine creates Class objects.
* This constructor is not used and prevents the default constructor being
* generated.
*/
private Class(ClassLoader loader) {
// Initialize final field for classLoader. The initialization value of non-null
// prevents future JIT optimizations from assuming this final field is null.
classLoader = loader;
}
由Class源码可见,其构造方法为私有方法,因此不可显示new出Class类,只能通过JVM调用生成
2、JVM生成Class对象
由图可知,每一个.java文件经过编译后会生成一个.class文件,该文件保存的就是HelloWorld的Class对象,经过JVM加载后便在内存中生成了一个HelloWorld的Class对象