类加载器
2020-05-25 本文已影响0人
gstsyyb
一、背景知识
1、class 文件先要经过类加载器进行加载生成class对象,验证后才可以在虚拟机jvm创建对象分配分配内存运行。
2、不同加载器加载的类是相互隔离的,子类可以使用父类加载的,但是父类不能使用子类加载的(不同加载器加载不同目录的资源-class、resource文件)
3、使用类加载器获取加载位置下的资源文件:getResource
image.png
二、加载过程
1、双亲委派,目的保证核心类不被重写,其次子类可以使用父类加载的对象,但是父类不能使用子类加载器加载的对象
2、继承ClassLoader 实现findClass方法,最终加载是调用findClass
使用Class.forName(String name, boolean initialize,ClassLoader loader)也可加载 class
3、contextClassLoader 线程上下文加载器 (ServiceLoader)
三、优缺点
优点:保证核心类不被修改、安全
缺点:父类不能识别子类的 class 对象,因为 class 加载到不同的命名空间中
面试题:
1、为什么设计这样一种加载方式,怎么加载的
防止破坏 java 的核心类,比如自己写了 Object 。不同加载器加载不同目录下的 jar 及资源文件( rt.jar ext/....jar classpath:jar)