猿问

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

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


class A {

    int x;


    A() {}

}

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


慕的地10843
浏览 59回答 1
1回答

幕布斯6054654

解释正如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: 0After: 1在第一个任务之前x就已经是这样了。正如 JLS 中所述,它在变量创建时立即默认为。0x = ...0
随时随地看视频慕课网APP

相关分类

Java
我要回答