java运行时将编译源码成字节码,由jre运行,jre由java虚拟机实现。再由jvm分析字节码,解释并执行。
类加载器有哪些
引导类加载器(Bootstrap ClassLoader):加载Java的核心库(jre/lib/rt.jar),同时加载另外两种类加载器,由C++编写;
扩展类加载器(Extensions ClassLoader):加载Java的扩展库(jre/ext/*.jar),父类加载器为null;
应用类加载器(Application ClassLoader):它根据 Java 应用的类路径(CLASSPATH)来加载 Java 类。一般来说,Java 应用的类都是由它来完成加载的,父类加载器为Extensions ClassLoader;
自定义加载器,父类加载器为Application ClassLoader;
1.加载(从磁盘加载到内存)
2.验证(验证.class格式是否正确)
3.准备(分配内存)
4.解析(类装载器装在雷所引用的所有类)
5.初始化(对象的初始化过程)
Class.forName
当一个classloader加载一个Class的时候,这个Class所依赖的和引用的其它Class 通常 也由这个classloader负责载入。
1.ClassLoader.loadClass()
2.ClassLoader.findClass()
3.概念:当一个类收到了类加载请求,他首先不会尝试加载自身,而是把这个请求委派给父类,每个层次加载器都是,因此所有的加载都会传送到启动类加载中,只有父类反馈自身无法完成这个请求时,自类加载器才会尝试自己去加载。
4.优点
不重复加载;
保证了核心库不会被随意篡改;
解决了依赖问题。
1.全盘委托机制
2.借助Launcher的构造方法和 setContextClassLoader()



