标签:代码 init 需要 throws nbsp 执行 classname stat 常量池
Class.forName返回的Class对象可以决定是否初始化。而ClassLoader.loadClass返回的类型绝对不会初始化,最多只会做连接操作。
Class.forName可以决定由哪个classLoader来请求这个类型。而ClassLoader.loadClass是用当前的classLoader去请求。
JDBC的注册驱动基本都采用Class.forName。
public static Class<?> forName(String name, boolean initialize,ClassLoader loader) throws ClassNotFoundException;
public static Class<?> forName(String className)throws ClassNotFoundException;
注:initialize:如果为true,则会在返回Class对象之前,对该类型做连接,校验,初始化操作。(如:执行static块中的代码)
loader:用自定义的类加载器来请求这个类型;当然,你也可以传入null,用bootstrap加载器。
protected synchronized Class<?> loadClass(String name, boolean resolve)throws ClassNotFoundException;
public Class<?> loadClass(String name) throws ClassNotFoundException;
注:resolve:表示是否需要连接该类型,里面包括校验class文件,准备分配内存,类型常量池的替换,但是并不会初始化该类型。
Java 笔记之Class.forName与classloader
标签:代码 init 需要 throws nbsp 执行 classname stat 常量池
原文地址:http://www.cnblogs.com/cnhy/p/6378995.html