JVM: java虚拟机
jvm运行我们编写的.java文件转换后的.class文件
问题一 :Class在本地磁盘上 如何记载到jvm中
问题二:jvm又是如何加载java程序所使用的系统类(系统jar 第三方jar)?
解决方案 :使用java中的类加载器 类加载器是jvm的一部分
类加载器不是一个 当jvm运行
运行
-
当jvm运行 先运行应用程序类加载器 判断是否有父加载器 有则启动父加载器
-
启动扩展类加载器 启动后检测是否有 父加载器
-
启动 启动类加载器(最上层的 父加载器)
加载
-
启动类加载器先加载 加载jre/lib的jar
-
然后加载扩展类加载器 加载jre/lib/ext下的jar
-
应用程序类加载器进行加载 加载classpath(自己编写的类) 自己编写的类的编译的的class文件
【说明】
当一个类被父加载器加载了 子加载器就不会加载
面试题:自己编写和系统类完全一样的类 能否被执行?
java.lang 类:String
答案:不能被执行 因为被系统的父类加载器加载了 自己的不会被加载到
双亲委派机制的作用 :确保java的安全,不让自己写的类替换掉Java中的类 自己的不会被加载到。