码迷,mamicode.com
首页 > 编程语言 > 详细

Java 笔记之Class.forName与classloader

时间:2017-02-08 17:09:32      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:代码   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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!