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的主要内容,如果未能解决你的问题,请参考以下文章