再说他们的区别时,先看一下类加载过程分为: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 静态代码快的数据无法执行。