类加载器ClassLoader
类加载器就是寻找类的字节码文件并构造出类在JVM内部表示对象的组件。
类加载工作由ClassLoader及其子类负责,ClassLoader是一个重要的Java运行时系统组件,它负责在运行时查找和装入Class字节码文件。
JVM在运行时会产生三个ClassLoader:根类加载器,ExtClassLoader和AppClassLoader。
根类加载器不是ClassLoader的子类,它是用C++编写,因此我们在Java中看不到它。根类加载器负责加载JRE的核心类库,如JRE目标下的rt.jar、charsets.jar等。
ExtClassLoader负责加载JRE扩展目录ext中的jar包。
AppClassLoader负责ClassPath路径下的类包。
这三个加载器之间存在父子层级关系,即根类加载器是ExtClassLoader的父加载器,ExtClassLoader是AppClassLoader的父加载器。
JVM加载类时使用“全盘负责委托机制”。
ClassLoader是一个抽象类,位于java.lang包中:
1. Class loadClass(String name):
2. Class defineClass(String name, byte[] b, int off, int len):
3. Class findSystemClass(String name):
4. Class findLoadedClass(String name):
5. ClassLoader getParent():
类文件被加载并解析后,在JVM内将拥有一个对应的java.lang.Class类描述对象,该类的实例都拥有指向这个类描述对象的引用,而类描述对象又拥有指向关联ClassLoader的引用。
每一个类在JVM中都拥有一个对应的java.lang.Class对象,它提供了类结构信息的描述。数组、枚举、注解以及基本Java类型甚至void都拥有对应的Class对象。
Class对象是在加载类时由JVM通过调用类加载器中的defineClass()方法自动构造的。
posted on 2019-02-17 23:40 shammgod_code 阅读(120) 评论(0) 编辑 收藏 举报