首页 > 代码库 > Java 笔记之Class.forName与classloader

Java 笔记之Class.forName与classloader

   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