gpt4 book ai didi

java - 默认构造函数如何初始化字段

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:59:31 25 4
gpt4 key购买 nike

正如许多作者在他们的书中所写的那样,类中实例变量的默认值是由类默认构造函数初始化的,但我对这个事实的理解有问题。

class A {
int x;

A() {}
}

我已经提供了类A的默认构造函数,那么x的值如何初始化为0呢?

最佳答案

解释

JLS 中所写,在任何其他赋值之前,字段总是自动初始化为它们的默认值

int 的默认值为 0。因此,根据定义,这实际上是 Java 标准的一部分。称之为魔术,它与构造函数中写入的内容或任何内容无关。

因此源代码中没有任何内容明确地执行此操作。它在 JVM 中实现,JVM 必须遵守 JLS 以表示 Java 的有效实现(Java 实现不止一种)。

参见 §4.12.5 :

Initial Values of Variables

Each class variable, instance variable, or array component is initialized with a default value when it is created (§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 = ...之前,x已经是0。如 JLS 中所述,它在创建变量时立即默认为 0

关于java - 默认构造函数如何初始化字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57978048/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com