Java 构造函数是如何执行的?

Java 构造函数是如何执行的?,java,jvm,initialization,Java,Jvm,Initialization,我正在对课堂幻灯片进行一些修改,上面说构造函数是按以下方式执行的: 如果构造函数以此开头,则递归执行指定的构造函数,然后转到步骤4 调用显式或隐式指示的超类构造函数(除非该类是java.lang.Object) 按照该类中声明的顺序初始化对象的字段 执行此构造函数主体的其余部分 我不明白的是,构造函数永远不能用这个“开始”,因为即使它不形成类层次结构/关系,默认情况下也会插入super() 这与上面的描述有什么关系?构造函数(对于除java.lang.Object之外的每个类)必须以“super

我正在对课堂幻灯片进行一些修改,上面说构造函数是按以下方式执行的:

  • 如果构造函数以此开头,则递归执行指定的构造函数,然后转到步骤4

  • 调用显式或隐式指示的超类构造函数(除非该类是
    java.lang.Object

  • 按照该类中声明的顺序初始化对象的字段

  • 执行此构造函数主体的其余部分

  • 我不明白的是,构造函数永远不能用这个“开始”,因为即使它不形成类层次结构/关系,默认情况下也会插入super()


    这与上面的描述有什么关系?

    构造函数(对于除java.lang.Object之外的每个类)必须以“super()”开头以调用其超类的构造函数,或者以“this()”开头以调用同一类的另一个构造函数。如果在构造函数中不包含这两个函数中的任何一个,编译器将插入对super()的调用。构造函数可以从调用同一类中的另一个构造函数开始,只要最终调用该类中调用超类构造函数的构造函数即可。

    我认为你说得不对,或者我不理解这个问题。从:

    如果构造函数主体不是以显式构造函数开头 调用和正在调用的构造函数 声明不是原始的一部分 类对象,然后是构造函数 主体由 编译器以超类开始 构造函数调用“super();”,一个 调用其 不带 争论

    因此,构造函数可以从调用同一类的另一个构造函数的
    this(…)
    开始。仅当调用的构造函数不是以this(…)或super(…)开头时,才会自动调用super()


    我想说的是,在构造了一个对象之后,super(…)已经被调用(如果类不是java.lang.object)。

    这里是一个使用
    这个(…)


    构造函数体中的第一条语句应该是this或super,如果没有任何内容,则defalt编译器会保留super()关键字(没有参数)。 因此,构造函数主体以这种方式执行:

  • 执行将基于此关键字或超级关键字,然后

  • 它将执行所有IIB(作为自上而下的方法),然后

  • 它将执行程序员保存的所有状态(如sop、初始化)

  • A类{
    (){
    这(10);//或super,…..执行语句1
    //执行IIB,执行声明2
    System.out.println(“from A()”);//执行语句3
    }
    A(国际一){
    System.out.println(“从A(int)”开始);
    }        
    {
    系统输出打印LN(“来自IIB-1”);
    }
    公共静态void main(字符串[]args){
    A=新的A();//调用构造函数A()
    System.out.println(“从主目录”);
    }
    {
    系统输出打印LN(“来自IIB-2”);
    }
    }
    
    输出:

    from IIB-1
    from IIB-2
    from A(int)
    from A()
    from main
    

    请添加步骤编号,否则很难猜出“步骤4”是什么意思。
    from IIB-1
    from IIB-2
    from A(int)
    from A()
    from main