类加载器的分类
类加载器包括以下4种,加载顺序按照序号从小到大。
1.Bootstrap ClassLoader启动类加载器,负责加载jre/lib/rt.jar。
2.Extension ClassLoader扩展类加载器,负责加载扩展功能Jar包,包括jre/lib/*.jar或ext目录下的jar包。
3.App ClassLoader应用类加载器,负责加载classpath中指定的jar包.
4.Custom ClassLoader自定义类加载器,如tomcat根据j2ee规范自行实现ClassLoader。
类的加载过程
Java加载类的过程主要包含如下3步。
a.加载:查找并加载类的二进制文件。
b.链接(包含3个子步骤):验证,确保加载类的正确性,防止恶意代码;准备,为类的静态变量分配内存空间并赋默认值;解析,将类的符号引用转化为直接引用。
c.初始化:为类的静态变量赋予初始值。
Tip
类初始化的条件
1.创建类的实例,new对象或者反射创建对象。
2.访问类或接口的静态变量时或静态方法时。
3.初始化一个类的子类时会先初始化父类。
4.JVM启动时明确指定的启动类。
类加载器这部分的水很深,会在之后的文章专门用一篇文章进行解析,之后一段时间,将主要进行工作2年多来项目的回顾总结。
参考资料
推荐:海子大神的JAVA技术栈相关文章:
单例模式,你知道的和你所不一定知道的一切
如何防止JAVA反射对单例类的攻击?
Java设计模式(一):单例模式,防止反射和反序列化漏洞
java 单例模式通过内部静态类的方式?
java 内部类如何访问外部类的同名属性
Java内部类的使用小结
Java类加载器总结
类加载原理分析&动态加载Jar/Dex
Java高新技术第一篇:类加载器详解