双亲委派机制
当加载一个类的时候会经过双亲委派机制,一层一层向上询问类是否已经加载了
java中存在三种类加载器
- C/C++库编写的引导类加载器
BootStrapClassLoader
- 扩展类加载器
ExtensionClassLoader
- 应用程序类加载器
ApplicationClassLoader
以及自定义的ClassLoader
当程序中需要加载一个类时,首先会向上传递是否加载了这时就会传递给ExtensionClassLoader
,ExtensionClassLoader
有父类就会接着传递给父类,一直到顶层的BootStrapClassLoader
,BootStrapClassLoader
会尝试加载类,如果失败,向下传递给ExtensionClassLoader
,如果也失败则接着向下传递尝试加载。
也就是说总的会先文引导类加载器是否加载了,然后一层一层向下的询问。
沙箱安全机制
引导类加载器会先加载jdk自带的文件,如果有一个外来类需要加载,并且包名和类名相同,则由于优先由引导类加载了自带的类,所以不会加载这个不符合规范的类,这样保护了java核心源代码,也称沙箱安全机制