jvm 将java源码(.java文件)编译成java字节码(.class),然后游类加载器将字节码转换为java.lang.class的实例。这样就可以创建相应的对象了。
- 类加载器如何工作?
- ClassLoader是所有类加载器的父类,其他的类加载器都集成于这个类。
- BootstrapClassLoader 是java虚拟机生成的类加载器,和ClassLoader无关,
- BootstrapClassLoader:根类加载器用来加载java核心类,即位于$JAVA_HOME/jre/lib/ 下的核心类。
- ExtensionClassLoader :扩展类加载器,负责加载$JAVA_HOME/jre/lib/ext 下的类。
- AppClassLoader :应用类加载器,这个负责加载用户开发的类。
- 自定义类加载器:如果远程加载如(本地文件/网络下载)的方式加载一个类,则必须要自己自定义一个 ClassLoader,复写其中的 findClass() 方法才能得以实现。
- 这些类加载器是如何加载一个类呢?
- 比如String类,这个是先用AppClassLoader 加载,这个类加载时会先向父类请求,父类在向上一级请求,先由优先级最高的类加载器加载String类,找到即返回,找不到由下一级寻找,依次类推。如图: