Java类的生命周期
类的生命周期
加载 -> 链接 -> 初始化 -> 使用 -> 卸载
加载
一个 Java 源代码文件(后缀 .java),通常被称为“编译单元”。每个编译单元中只能有一个 public 类,可以有其他非 public 类。.java 文件名与文件中这个唯一的 public 类同名。
编译一个 .java 文件时,文件中的每个类都会有一个输出文件(后缀 .class),每个 .class 文件名与类名相同。这个工作是 Java 编辑器负责,命令是”javac”。
Java 可运行程序(后缀 .jar)是一组 .class 文件,Java 解释器负责这些文件的查找、装载和解释。
Java 解释器的运行过程:
- 找出环境变量
CLASSPATH,例如”CLASSPATH=.;%JAVA_HOME%/lib”,作为查找 .class 文件的根目录 - 从根目录开始,解释器在每个
。。。。
由类加载器执行,该步骤将查找字节码,并从这些字节码中创建一个 Class 对象。
链接
在链接阶段验证类中的字节码,为静态域(static)分配存储空间,并且将解析这个类创建的其他类的引用(若有)。
初始化
举例说明,初始化Dog类时的执行顺序:
- 当首次创建类型为 Dog 的对象时,或 Dog 类的 static 成员/static 方法首次被访问时,Java 解释器查找类路径,定位 Dog.class 文件 – 这一步属于加载
- 载入 Dog.class 文件创建 Class 对象(加载),执行静态初始化(链接)。因此,静态初始化只在 Class 对象首次加载的时候执行一次
- 用”new Dog()”创建对象时,在堆上分配存储空间
- 这块存储空间会被清零,这也就完成了将 Dog 对象中的基本数据类型成员设置成了默认值,引用成员被设置成 null
- 执行所有字段定义处的初始化动作。字段初始化顺序同它们定义的先后顺序
- 执行构造器,若有父类则先执行父类构造器再执行子类构造器