Class.forName与classLoader区别

来源:互联网 发布:遗迹软件 编辑:程序博客网 时间:2024/04/29 08:44
Class 用来描述一个类型,当一个类型被装载(虚拟机读取二进制的class文件)的时候,会创建一个与该类型对应的Class对象到内存堆中。(这个时候该类型甚至没有被分配内存,设置默认值,更别说初始化了)。 
Class.forName有2个重载的方法: 
Java代码 
public static Class<?> forName(String name, boolean initialize,  
               ClassLoader loader)  
       throws ClassNotFoundException  
  
  
public static Class<?> forName(String className)   
               throws ClassNotFoundException  


第一个方法: 
name:类的全限定名,如:com.aaa.bbb.ccc 
initialize:如果为true,则会在返回Class对象之前,对该类型做连接,校验,初始化操作。(如:执行static块中的代码) 
loader:用自定义的类加载器来请求这个类型;当然,你也可以传入null,用bootstrap加载器。 
第二个方法: 
name和上面相同。默认initialize为true, 
而loader是这么获取的 
Java代码  收藏代码
ClassLoader.getCallerClassLoader()  


其实就是获取当前类的classLoader,也就是装载执行forName操作的类的classLoader 
0 0