Java 最新 JEP 草案:不再要求构造器的首行语句是 super() 或 this()


OpenJDK 官网公布了一项新的 JEP 草案,内容是不再要求 super() 或 this() 在构造器中作为首条语句出现。

该草案当前目标是更改 Java 语言规范,并对 Java 编译器进行相应的更改,以便:

  • super()this()不再必须作为构造器中的第一条语句出现
  • 保留提供给构造器的现有安全和初始化保证
  • 现有程序继续像以前一样编译和运行

按照目前的 Java 语言规范,构造器的第一条语句必须要求调用super()this()。但 Java 虚拟机实际上支持更多的灵活性:

  • this()super()的多次调用可能会出现在构造器中,只要在任何代码路径上有一次调用
  • 任意代码可出现在this()/super()之前,只要该代码不引用正在构建的实例
  • 不过this()/super()调用可能不会出现在try { }块内

事实上,JLS 受到了许多不必要的限制。而这种不一致属于历史产物:最初的 JVM 规范也有更多的限制,这导致了编译器生成的合成字段存在初始化问题——为了支持新的语言特性,如内部类和捕获的自由变量。现在 JVM 规范被放宽以适应编译器,但这种新的灵活性从未回到语言层面。

详情查看 https://openjdk.org/jeps/8300786。


相關推薦

2023-06-10

、Java 外部函数和内存 API 的第三预览版、Java Vector API 的最新迭代,以及预览形式的结构化并发等内容。 新功能则包括密钥封装机制 API Key Encapsulation Mechanism API 、Z 垃圾收集器的分代行为 Generational ZGC 、序列化集

2023-04-15

启动的类没有 static main 方法,但有一个非 private 零参数构造函数(即 public 、 protected 或包访问)和一个非 private 实例 main 方法,然后构造该类的一个实例。如果该类有一个带 String[] 参数的实例 main 方法,则调用该方法;否则,

2024-07-18

划在预计于 2025 年 3 月推出的 JDK 24 中更新发布。 提案要求对 JNI 的使用发出警告,并调整 Foreign Function & Memory (FFM) API 以一致的方式发出警告。所有这些警告的目的在于让开发人员做好准备,即未来版本中将默认禁止与本地

2023-03-26

(Pattern Matching for switch)  用 switch 表达式和语句的模式匹配,以及对模式语言的扩展来增强 Java 编程语言。将模式匹配扩展到 switch 中,允许针对一些模式测试表达式,这样就可以简明而安全地表达复杂的面

2021-12-16

力不从心,随着搭载 Android 智能手机的普及,Java 平台也不再支持小应用这种格式,安全管理器使用的环境变得更少了。多年来,它一直不是保护客户端 Java 代码的主要手段,也很少用于保护服务器端代码。 安全管理器三宗罪

2024-07-04

,也是 OSCHINA 开源PHP 推荐的国产开源产品、Typora 的首个增强插件。 VLOOK™ 的所有特性清单,详见快速入坑 → 一键了解 (备用链接) 🎉 — What's NEW — 🎉 🎉 链接地图、外链锚点检查 自动生成当前文档

2024-07-18

Sqlbean 介绍 Sqlbean是一款通过Java语法生成SQL语句的ORM插件,其理念是弱化在开发阶段对数据库的操作,无需先建表再开发,可直接编写实体类和业务代码,项目启动后自动创建表和维护表结构。内置大量常用方法,支持灵活的

2022-05-27

强 添加新选项 `argNameBasedConstructorAutoMapping`,启用后,构造函数参数名称用于在自动映射时查找列 #2192 在 `<constructor />`中,`<idArg />` 支持被排列在 `<arg />` 后面 #2541 为 `JdbcTransactionFactory` 添加新属性 `sk

2022-07-28

JDK 19 处于 Rampdown Phase Two 阶段,整个功能集已被冻结,将不再对 JEP 进行改动。 Java 19 只有 7 个新特性: 405: Record Patterns (Preview) 记录模式 422: Linux/RISC-V Port Linux/RISC-V 移植 424: Foreign Function & Memory AP

2022-11-29

Target”功能,该功能显示用于直接进入指定函数的 UI。 最新的 Java 插件已经开始支持此功能。当调试在语句上停止时,可以从菜单中选择“Step Into Target”,直接进入感兴趣的函数或目标。 Spring 组件的图示 为编辑区域添加

2024-07-12

造方法注入,不支持普通方法注入,bean 必须有一个无参构造器。这么实现的目的是,避免复杂的循环依赖,所以此时仅有一级 bean 容器缓存。并且是扫描规则很粗暴,是扫描到带 @Component 或 @Bean 的组件,直接实例化并放入容器

2022-12-09

clipse.org/equinox/drops/R-4.26-202211231800/ 更新亮点 支持 Java 19 JDK 19 / Java 19 已正式 GA。Eclipse JDT 在 4.26 中为 Java 19 提供了支持。 该版本支持以下 Java 19 特性: JEP 405: Record Patterns (Preview). JEP 427: Pattern Matching for Switch (T

2023-08-29

程、 内置分页方言 20+、 支持嵌套事务、多数据源、条件构造器、INSERT 策略、多语句 / 多结果。并兼容 Spring 及 MyBatis 用法。 它不依赖任何其它框架,因此可以很方便的和任意一个框架整合在一起使用。 依赖 <dependency>

2024-08-23

Open Source Initiative (OSI) 宣布推出最新的“开源 AI 定义 – 草案 v. 0.0.9”,进一步明确了开源模型和开源权重的组成部分,并指出系统的所有组件都需要满足开源标准,该系统才被视为开源。 该组织表示,计划在今年 10 月份发布