Class 用来描述一个类型,当一个类型被装载(虚拟机读取二进制的class文件)的时候,会创建一个与该类型对应的Class对象到内存堆中。(这个时候该类型甚至没有被分配内存,设置默认值,更别说初始化了)。
Class.forName有2个重载的方法:
Java代码
public static Class<?> forName(String name, boolean initialize,
ClassLoader loader)
throws ClassNotFoundException
public static Class<?> forName(String className)
throws ClassNotFoundException
第一个方法:
name:类的全限定名,如:com.aaa.bbb.ccc
initialize:如果为true,则会在返回Class对象之前,对该类型做连接,校验,初始化操作。(如:执行static块中的代码)
loader:用自定义的类加载器来请求这个类型;当然,你也可以传入null,用bootstrap加载器。
第二个方法:
name和上面相同。默认initialize为true,
而loader是这么获取的
Java代码 收藏代码
ClassLoader.getCallerClassLoader()
其实就是获取当前类的classLoader,也就是装载执行forName操作的类的classLoader
Class.forName有2个重载的方法:
Java代码
public static Class<?> forName(String name, boolean initialize,
ClassLoader loader)
throws ClassNotFoundException
public static Class<?> forName(String className)
throws ClassNotFoundException
第一个方法:
name:类的全限定名,如:com.aaa.bbb.ccc
initialize:如果为true,则会在返回Class对象之前,对该类型做连接,校验,初始化操作。(如:执行static块中的代码)
loader:用自定义的类加载器来请求这个类型;当然,你也可以传入null,用bootstrap加载器。
第二个方法:
name和上面相同。默认initialize为true,
而loader是这么获取的
Java代码 收藏代码
ClassLoader.getCallerClassLoader()
其实就是获取当前类的classLoader,也就是装载执行forName操作的类的classLoader