序我是在关于Java的面试题里了解到类加载器的,在这之前从未想过Java里类是如何被加载、解析的,一直以为只要Import就好了。事实上Java类加载器是一块非常重要的内容,可以用在类层次划分、OSGi、热部署、代码加密等领域。即使业务上可能没有涉及到,了解相关知识对排除BUG也是有帮助的。 类加载器基本概念平时在编写代码时,想使用什么类就Import就好了,好像这些类一开始就在JVM里了一样,现在我们知道这是因为JVM自动为我们加载了这些类。顾名思义,类加载器的工作主要是加载Java字节码文件(也就是.class文件)到虚拟机里,并解析为java.lang.Class类的一个实例。到这里,被加载的类还是不能像平时一样直接new一个对象出来的。因为一个类总共要经历加载、验证、解析、初始化等4个步骤后才是Java里的一个类型。后面几个步骤不是本文重点,大家可以自行学习。 类加载器的组成类加载器一共有4种,分别是引导类加载器(bootstrap class loader)、扩展类加载器(extensions class loader)、系统类加载器(system class loader)、自定义加载器,它们之间的加载关系如下图所示: