运行前先编译成class,类初始化的时候调用java.lang.ClassLoader加载字节码,ClassLoader调用JVM的native方法来定义一个java.lang.Class实例
启动类加载器: 将/lib下目录下的类加载到虚拟机内存中,加载java的核心库,不继承java.lang.ClassLoader,不能被java程序调用,是使用c++编写的
拓展类加载器:加载/lib/ext下的,拓展库,可以直接使用
应用程序类加载器:一般情况下是系统默认的类加载器
层次结构大概如下
Bootstrap ClassLoader
Extension ClassLoader
App ClassLoader
默认使用第三个,ClassLoader.getSystemClassLoader()返回的是第三个
获取类加载器的时候如果返回null,那么就是被Bootstrap加载的
核心方法
loadClass 加载指定类
findClass 查找指定类
findLoadedClass 查找JVM已经加载过的类
defineClass 定义一个类
resolveClass 链接指 ...