正如许多作者在他们的书中所写的那样,类内实例变量的默认值是由类默认构造函数初始化的,但我在理解这一事实时遇到了问题。class A { int x; A() {}}既然我已经提供了A类的默认构造函数,那么现在x的值如何初始化为0呢?
1 回答
幕布斯6054654
TA贡献1876条经验 获得超7个赞
解释
正如JLS中所写,在进行任何其他分配之前,字段始终会自动初始化为其默认值。
默认int
值为0
. 所以根据定义,这实际上是 Java 标准的一部分。称之为魔法,它与构造函数中编写的内容或任何内容无关。
所以源代码中没有任何内容明确地执行此操作。它在 JVM 中实现,JVM 必须遵守 JLS 才能表示有效的 Java 实现(Java 实现有多种)。
参见§4.12.5:
变量的初始值
每个类变量、实例变量或数组组件在创建时都会使用默认值进行初始化(第 15.9 节、第 15.10.2 节)
笔记
您甚至可以观察到这种情况发生在任何作业之前。看一下下面的例子:
public static void main(String[] args) {
System.out.println("After: " + x);
}
private static final int x = assign();
private static int assign() {
// Access the value before first assignment
System.out.println("Before: " + x);
return x + 1;
}
哪个输出
Before: 0
After: 1
在第一个任务之前x就已经是这样了。正如 JLS 中所述,它在变量创建时立即默认为。0x = ...0
添加回答
举报
0/150
提交
取消