Loading... # 自己创建一个java.lang.String类是否会被类加载器加载?——浅谈双亲委派机制 ## 类加载器有四种 1.启动类加载器(BootstrpClassLoader) 2.扩展类加载器(ExtClassLoader) 3.应用程序类加载器(AppClassLoader) 4.自定义类加载器(CustomClassLoader) ## BootstrpClassLoader 负责加载%JAVA_HOME%/jre/lib,-Xbootclasspath参数指定的路径以及%JAVA_HOME%/jre/classes中的类。 ## ExtClassLoader 负责加载%JAVA_HOME%/bin/ext目录下的所有jar包,或者是java.ext.dirs参数指定的路径。 ## AppClassLoader 负责加载用户类路径(classpath)上所指定的类库,如果应用程序中没有自定义加载器,那么此加载器就为默认加载器。 ## CustomClassLoader 应用程序根据自身需要自定义的ClassLoader。 ## 双亲委派机制得工作过程: ![][1] 类加载器收到类加载的请求之后,首先查看自己有没有加载过该类,如果有,直接返回已经加载的类,如果没有,就向上询问自己的父加载器,父加载器再次查看自己有没有加载过,如果没有,继续向上询问,直到BootstrapClassloader。如果BootstrapClassloader已经加载过该类,就返回,如果没有加载过,就尝试加载,如果加载不成功,就委托给子加载器去加载,子加载器如果不能加载,继续向下委托,直到有加载器能加载,如果到最后都没能成功加载,抛出ClassNotFountException异常。 ## 那么,自建java.lang.String是否会被类加载器加载呢? 很显然不能,默认的java.lang.String位于rt.jar中,该jar位于%JAVA_HOME%/jre/lib路径下,会优先由BootstrpClassLoader加载,所以自定义的java.lang.String是不会被加载的。 [1]: https://www.princelei.club/usr/uploads/2019/08/1184171322.jpg Last modification:June 11th, 2020 at 06:18 pm © 允许规范转载
立意高远,以小见大,引发读者对社会/人性的深层共鸣。
文章深入浅出,既有深度思考,又不乏广度覆盖,令人叹为观止。
建议补充发展中国家案例,避免视角局限。
实验数据可增加误差分析以提高严谨性。
文章已具雏形,需进一步聚焦核心问题。
看的我热血沸腾啊www.jiwenlaw.com
怎么收藏这篇文章?
想想你的文章写的特别好https://www.jiwenlaw.com/