java - Java 类中的成员字段是否按声明顺序初始化?
问题描述
假设我有一个 Java 类,如下所示:
public class Example {
private Foo foo = new Foo();
private Bar bar = new Bar(this.foo);
}
是否保证bar
将始终使用 aFoo
作为其构造函数进行实例化,或者是否有机会将其实例化null
?
Java 类的成员初始化的顺序是否得到保证?
解决方案
是的,这是有保证的。
特别是,JLS 12.5 Creation of New Class Instances说(强调添加):
- 执行此类的实例初始化程序和实例变量初始化程序,将实例变量初始化程序的值分配给相应的实例变量,按照它们在源代码中以文本形式出现的从左到右的顺序。如果执行这些初始化程序中的任何一个导致异常,则不会处理更多初始化程序,并且此过程会突然完成相同的异常。否则,继续执行步骤 5。
推荐阅读
- gis - 是否可以使用 OSRM 来计算进入建筑物的路线?
- rust - 如何从结构的函数内部操作内容变量?
- gitlab-ci - 如果多行脚本返回不等于零的退出代码,则 Gitlab-CI 停止阶段
- javascript - 在 Javascript/JQuery 中选择单选选项时,是否可以动态更改下拉列表的颜色或更改列表项的颜色?
- docker - 也无法访问正在运行的容器根目录和映像
- arrays - 在 React 中从 2 个带有条件的 json 文件中获取值
- flutter - 从列表中提取最大值并复制最大值
- c# - 如何使用 System.Net.Http 从 OAuth 请求访问令牌?401 错误
- sql - 执行 CTAS 时使用多字符分隔符 - HIVE
- c# - 使用 RadioBoxes 乘以一个值,然后在文本框中显示该值