类的加载、连接、初始化
加载:查找并加载二进制数据(将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构)
加载.class文件的方式:
1、从本地文件系统中直接加载
2、通过网络下载.class文件
3、从zip、jar等归档文件中加载.class文件
4、从专有数据库中提取.class文件
5、将Java源文件动态编译为.class文件
连接:1、验证:二进制数据是否完整、安全
2、准备:静态变量分配内存,并初始化为默认值
3、解析:符号引用转换为直接引用
初始化:为类的静态化变量赋予正确的初始值
类的主动使用和被动使用
主动使用:
1、创建了该类的实例
2、对某个类的静态变量进行了读/取操作
3、调用某类的静态方法
4、反射API,如Class.forName("com.js.Test")
5、初始化某个类的子类
6、JVM启动时标明的启动类,如:java com.js.Test
所有的JVM实现必须在某个类或借口被Java程序“首次主动使用”时才初始化他们(也就是只执行加载和连接,不执行初始化操作)
被动使用:其他情况皆属于被动使用。