有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

本例中是否调用java默认构造函数

我有这门课

class A {

  int a;
  int b;
  int c;

  A() {
    a = 3;
    b = 4;
  }

}

这是初始化两个实例变量的构造函数。第三个实例变量会发生什么变化?它将由默认构造函数初始化吗?如果是,通话顺序是什么


共 (1) 个答案

  1. # 1 楼答案

    如果使用javap反编译类,您会发现:

    Compiled from "A.java"
    class A {
      int a;
    
      int b;
    
      int c;
    
      A();
        Code:
           0: aload_0
           1: invokespecial #1                  // Method java/lang/Object."<init>":()V
           4: aload_0
           5: iconst_3
           6: putfield      #2                  // Field a:I
           9: aload_0
          10: iconst_4
          11: putfield      #3                  // Field b:I
          14: return
    }
    

    即使不知道这个字节码是什么意思,您也可以看到ab在构造函数中被提到(这是它们在构造函数中被赋值的地方),但是c的唯一提及是在字段声明中,int c。所以构造器中的c没有发生任何变化

    由于没有显式初始化,它将具有默认的初始值,如JLS Sec 4.12.5中所述

    Each class variable, instance variable, or array component is initialized with a default value when it is created (§15.9, §15.10.2):

    • ...
    • For type int, the default value is zero, that is, 0.
    • ...

    因此c的值为零,但不是调用构造函数的结果(就JVM而言,这与创建实例不同)