行业资讯 2025年08月6日
0 收藏 0 点赞 396 浏览 2063 个字
摘要 :

文章目录 1.语法 2.Java实例初始化块的工作原理是什么? 3.Java实例初始化块执行顺序 4. 继承 5.Java实例初始化块的特点 Java实例初始化程序是一种代码块,它包含在每……




  • 1.语法
  • 2.Java实例初始化块的工作原理是什么?
  • 3.Java实例初始化块执行顺序
  • 4. 继承
  • 5.Java实例初始化块的特点

Java实例初始化程序是一种代码块,它包含在每次创建新的类实例时都会运行的指令。我们可以使用初始化器块来编写所有构造函数的初始化信息,否则这些信息必须在每个构造函数中单独编写。

1.语法

Java实例初始化块是用花括号创建的。对象初始化语句写在花括号里面。

public class DemoClass {
  public DemoClass() {
    //statements
  }
  /* 初始化块 */
  {
    //statements
  }
}

2.Java实例初始化块的工作原理是什么?

在编译期间,Java编译器在每个构造函数的super()语句之后,立即复制初始化块(instance initializer block)的字节码。

public class Main {
  public Main() {
    System.out.println(\"Statement in constructor\");
  }
  {
    System.out.println(\"Statement in initializer\");
  }
}

考虑上述程序,其中构造函数和初始化块都有一个打印语句。在代码被编译后,字节码在逻辑上结构如下:

public class Main {
  public Main() {
    super();
    System.out.println(\"Statement in initializer\");
    System.out.println(\"Statement in constructor\");
  }
}

我们可以通过执行程序来验证这种结构,该程序打印以下输出:

Statement in initializer
Statement in constructor

3.Java实例初始化块执行顺序

如果一个类中有多个初始化块,它们将按照类定义中出现的顺序执行。在以下示例中,初始化程序块 1 始终在块 2 之前执行。

public class Main {
  public Main() {
    System.out.println(\"Statement in constructor 2\");
  }
  {
    System.out.println(\"Statement in initializer 1\");
  }
  {
    System.out.println(\"Statement in initializer 2\");
  }
}

当使用默认构造函数创建实例时,程序输出:

Statement in initializer 1
Statement in initializer 2
Statement in constructor 2

4. 继承

当父类和子类都有初始化块时,创建子类实例时的流程顺序如下:

  • 调用子类构造函数。
  • 子类构造函数的第一个语句是super()(或提供显式构造函数),因此调用父类构造函数。
  • Parent的初始化程序按照其出现的顺序执行。
  • Parent的构造函数语句被执行。
  • 子类的初始化程序按照其出现的顺序执行。
  • 执行子类构造函数语句。

让我们看看上面的操作:

class ParentClass {
  public ParentClass() {
    System.out.println(\"In ParentClass Constructor\");
  }
  {
    System.out.println(\"In ParentClass Instance Initializer\");
  }
}
class ChildClass extends ParentClass {
  public ChildClass() {
    super();  //如果不写, JVM会默认自动插入
    System.out.println(\"In ChildClass Constructor\");
  }
  {
    System.out.println(\"In ChildClass Instance Initializer 1\");
  }
  {
    System.out.println(\"In ChildClass Instance Initializer 2\");
  }
}

当我们创建ChildClass的实例时,程序输出:

In ParentClass Instance Initializer
In ParentClass Constructor
In ChildClass Instance Initializer 1
In ChildClass Instance Initializer 2
In ChildClass Constructor

5.Java实例初始化块的特点

  • 我们可以在一个类中定义多个实例初始化块。
  • 所有的实例初始化块按照它们在类主体中出现的顺序依次执行。
  • 实例初始化块在调用父类构造函数之后、执行子类构造函数之前运行。
  • 请注意,如果我们没有在子类的构造函数中明确地提供默认的父类构造函数super(),Java将会插入默认的父类构造函数。
  • 所有的初始化器执行完之后,执行构造函数的语句。
  • 我们可以在初始化器中使用这个类和父类的构造函数。

归属教程 Java基础教程

文章目录 前言  第1章 Java语言基础 第2章 流程控制语句 第3章 面向对象编程 第4章 Java 字符 […]

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/9143.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

988
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

465
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

348
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

456
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

517
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

832
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号