双亲委派机制了解一下
什么是类加载器?
类加载器是jre的一部分,负责动态将类添加到Java虚拟机。
类加载分类
1、启动类加载器 bootstrap classloader :加载jre/lib/rt.jar
2、扩展类加载器 extension classloader:加载jre/lib/ext/*.jar
3、应用程序类加载器 app classloader:加载classpath上指定的类库
双亲委派机制
双亲委派机制是指当一个类加载器收到一个类加载请求时,该类加载器首先会把请求委派给父类加载器。每个类加载器都是如此,只有在父类加载器在自己的搜索范围内找不到指定类时,子类加载器才会尝试自己去加载。
双亲委派模型工作工程:
1.当Application ClassLoader 收到一个类加载请求时,他首先不会自己去尝试加载这个类,而是将这个请求委派给父类加载器Extension ClassLoader去完成。
2.当Extension ClassLoader收到一个类加载请求时,他首先也不会自己去尝试加载这个类,而是将请求委派给父类加载器Bootstrap ClassLoader去完成。
3.如果Bootstrap ClassLoader加载失败(在<JAVA_HOME>\lib中未找到所需类),就会让Extension ClassLoader尝试加载。
4.如果Extension ClassLoader也加载失败,就会使用Application ClassLoader加载。
5.如果Application ClassLoader也加载失败,就会使用自定义加载器去尝试加载。
6.如果均加载失败,就会抛出ClassNotFoundException异常。
问题一:能不能自己写个类,也叫java.lang.String
可以,但是因为双亲委派工作机制的存在,虚拟机还是会默认加载jre中的Java.lang.String。所以如果要想使用自己定义的string类,需要再写一个类加载器。