当前位置: 代码迷 >> 综合 >> ClassLoader.loadClass()和Class.forName()的区别
  详细解决方案

ClassLoader.loadClass()和Class.forName()的区别

热度:97   发布时间:2024-01-09 10:51:40.0

再说他们的区别时,先看一下类加载过程分为:load,link,init.
1.1.load(BootstrapClassLoader(jre/lib/*.jar),ExtendClassLoader(jre/ext/*.jar),AppClassLoader(我们写的类,第三方类))。

    1.双亲委派机制:

classloader 实现双亲委派机制源码

破坏环境委派机制改写loadClass 方法。


1.2.link(valid验证cafebabe开头,prepation为静态变量准备分配内存并设置默认初始值,resolution对象静态变量符号设置默认值)。

 

1.3.init (属性的指向创建好的数据值,执行类的构造器方法init())。

最后

Class.forName(className,true,classloader) 第二个参数便是classloader 后 init 需要做
ClassLoader.loadClass(className,false) 第二个参数不进行连接

两者的区别在于 ClassLoader.loadClass 不会linking 静态代码快的数据无法执行。

 

 

  相关解决方案