当前位置: 首页 > 图灵资讯 > 技术篇> Java类加载:静态语句和类加载哪个先发生?

Java类加载:静态语句和类加载哪个先发生?

来源:图灵教育
时间:2025-02-20 19:37:38

java类加载:静态语句和类加载哪个先发生?

Java类加载机制:静态语句初始化优先于类加载

Java类加载顺序的一个常见问题是:在执行以下代码时,是先加载类A,还是先执行静态语句f()?

class A {
    public static void f() {}
}
A a = new A();

答案是:静态语句先加载,再初始化。

详细说明类加载过程

立即学习“Java免费学习笔记(深入);

Java的类加载过程包括加载、链接和初始化三个主要阶段。 其中,“加载”阶段排名第一。静态语句的初始化发生在“初始化”阶段,因此类别加载后。

详细步骤:

  1. 加载: JVM首先加载类A的字节码文件。
  2. 链接: 链接阶段包括三个步骤:验证、准备和分析,以确保类别的正确性。
  3. 初始化: 在这个阶段,JVM开始赋值静态句块和静态变量。A.f()此时方法的代码已初始化,但除非显式调用,否则不执行。
  4. 实例化: A a = new A(); 这个代码创建了A类的例子。此时,除静态成员外,还将初始化非静态变量、非静态代码块和构造函数。

实例对象的初始化顺序

实例对象a时,初始化顺序如下:

  1. 父类静态变量和静态代码块(如果有父类)
  2. 静态变量和静态代码块
  3. 父类非静态变量和非静态代码块(如果有父类)
  4. 非静态变量和非静态代码块
  5. 父类构造函数(如果有父类)
  6. 本类结构函数

对Java类加载工艺有更深入的了解 这篇文章。

以上是Java加载:静态语句和类加载哪个先发生?详情请关注图灵教育其他相关文章!