登录
首页 >  文章 >  java教程

Java类初始化顺序:静态代码块与构造代码块解析

时间:2025-11-29 15:17:39 278浏览 收藏

编程并不是一个机械性的工作,而是需要有思考,有创新的工作,语法是固定的,但解决问题的思路则是依靠人的思维,这就需要我们坚持学习和更新自己的知识。今天golang学习网就整理分享《Java类初始化顺序解析:静态代码块与构造代码块先后》,文章讲解的知识点主要包括,如果你对文章方面的知识点感兴趣,就不要错过golang学习网,在这可以对大家的知识积累有所帮助,助力开发能力的提升。

Java类初始化顺序为:父类静态成员→子类静态成员→父类实例成员→父类构造函数→子类实例成员→子类构造函数,静态代码块仅加载时执行一次,构造代码块每次创建对象时执行,且均按书写顺序运行。

Java类的初始化顺序是怎样的 静态代码块和构造代码块先后

Java类的初始化顺序遵循一定的规则,理解这些顺序对掌握对象创建过程非常重要。当一个类被加载并创建实例时,各个代码块和构造器的执行顺序是固定的。

静态代码块(static block)

静态代码块用于初始化类的静态成员,它在类第一次被加载时执行,且只执行一次。静态代码块优先于任何实例相关的初始化,包括构造代码块和构造函数。

常见情况:

  • 类首次被主动使用(如创建实例、调用静态方法)时触发加载
  • 多个静态代码块按书写顺序执行

构造代码块(instance initializer block)

构造代码块用于初始化每个对象的公共部分,在每次创建对象时都会执行,它在静态代码块之后、构造函数之前运行

特点:

  • 每 new 一次对象就执行一次
  • 多个构造代码块按源码中的顺序执行
  • 可以看作是所有构造器共用的“前置逻辑”

构造函数(constructor)

构造函数负责具体对象的初始化。在构造代码块执行完成后,才进入对应的构造函数体。

完整初始化顺序总结

假设有一个类包含静态代码块、构造代码块和构造函数,其执行顺序如下:

  1. 父类静态变量和静态代码块(按出现顺序)
  2. 子类静态变量和静态代码块
  3. 父类实例变量和构造代码块
  4. 父类构造函数
  5. 子类实例变量和构造代码块
  6. 子类构造函数

简单示例帮助理解:

class Parent {
  static { System.out.println("父类静态代码块"); }
  { System.out.println("父类构造代码块"); }
  Parent() { System.out.println("父类构造函数"); }
}

class Child extends Parent {
  static { System.out.println("子类静态代码块"); }
  { System.out.println("子类构造代码块"); }
  Child() { System.out.println("子类构造函数"); }
}

public class Test {
  public static void main(String[] args) {
    new Child();
  }
}

输出结果为:

父类静态代码块
子类静态代码块
父类构造代码块
父类构造函数
子类构造代码块
子类构造函数

基本上就这些。静态先执行,然后是构造代码块,最后是构造函数,继承情况下还要考虑父类到子类的层级顺序。

今天带大家了解了的相关知识,希望对你有所帮助;关于文章的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>