今天看了看java类的生命周期,感觉很不错。总结了下,由于水平有限,文中存在不足之处,欢迎大家批评指正。

Java类的生命周期 java 类生命周期_初始化

java类的生命周期分5个阶段:

1.加载阶段

1.1加载前提:当一个类可能被使用时,JVM会加载此类。

1.2加载过程:

1.2.1找到需要的类,并把类的信息加载到JVM的方法区中。

1.2.2在堆中实例化一个java.lang.Class的对象,作为方法区中这个类的信息的入口。

2.连接阶段

连接任务:加载后的验证工作和初始化前的准备工作。即:验证、准备和解析。

2.1验证

验证类是否合法。

2.2准备

为类的static变量(包括final变量)分配内存,并设为jvm默认的初始值。

注:final变量的默认值是程序中设定的值(使用常量不会引起类的初始化)。

2.3解析

把常量池中的引用(即标识符)转换为内存地址。

3.初始化阶段

只有在直接引用一个类的时候才会将一个类初始化。

初始化工作包括:其实就是执行static变量赋值语句和执行static代码块。

4.使用阶段

对类的使用包括直接引用和被动引用。

4.1被动引用

4.1.1调用类的“static final 变量”。

4.1.2通过子类调用父类的static变量、static方法,对子类来说是被动引用。

4.1.3新建一个类数据,如String[] strs = new String[10]。

4.2直接引用

4.2.1设置或使用类的static变量、调用类的static方法(包括main方法)、实例化一个该类的对象。

4.2.2初始化子类的时候,直接引用父类。

4.2.3通过反射,Class.forName("类路径")。

当直接引用一个类时,该类没有被初始化,则会初始化该类。但若被动引用一个类时,不会触发该类的初始化。

5.卸载阶段

在JVM垃圾回收的时候若检测到类不会再被使用时,卸载该类。

注:关于Java类周期的前3个阶段的执行顺序,加载阶段和连接阶段可能交叉执行,连接阶段和初始化阶段又可能交叉执行。