Java 笔记之Class.forName与classloader

Posted hq_sunshine

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的主要内容,如果未能解决你的问题,请参考以下文章

java反射之一

Class.forName的作用以及为什么要用它

Java反射中Class.forName与classLoader的区别

Java基础之反射

关于用java反射调用一个类里面的方法并执行

反射基础详解