为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕的地10843 2023-08-04 15:00:45
正如许多作者在他们的书中所写的那样,类内实例变量的默认值是由类默认构造函数初始化的,但我在理解这一事实时遇到了问题。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


查看完整回答
反对 回复 2023-08-04
  • 1 回答
  • 0 关注
  • 58 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信