首页 > 图灵资讯 > 技术篇>正文
Java类加载:静态语句和类加载哪个先发生?
2025-02-20 19:37:38
Java类加载机制:静态语句初始化优先于类加载
Java类加载顺序的一个常见问题是:在执行以下代码时,是先加载类A,还是先执行静态语句f()?
class A { public static void f() {} } A a = new A();
答案是:静态语句先加载,再初始化。
详细说明类加载过程
立即学习“Java免费学习笔记(深入);
Java的类加载过程包括加载、链接和初始化三个主要阶段。 其中,“加载”阶段排名第一。静态语句的初始化发生在“初始化”阶段,因此类别加载后。
详细步骤:
- 加载: JVM首先加载类A的字节码文件。
- 链接: 链接阶段包括三个步骤:验证、准备和分析,以确保类别的正确性。
- 初始化: 在这个阶段,JVM开始赋值静态句块和静态变量。A.f()此时方法的代码已初始化,但除非显式调用,否则不执行。
- 实例化: A a = new A(); 这个代码创建了A类的例子。此时,除静态成员外,还将初始化非静态变量、非静态代码块和构造函数。
实例对象的初始化顺序
实例对象a时,初始化顺序如下:
- 父类静态变量和静态代码块(如果有父类)
- 静态变量和静态代码块
- 父类非静态变量和非静态代码块(如果有父类)
- 非静态变量和非静态代码块
- 父类构造函数(如果有父类)
- 本类结构函数
对Java类加载工艺有更深入的了解 这篇文章。
以上是Java加载:静态语句和类加载哪个先发生?详情请关注图灵教育其他相关文章!
