Java 构造函数是如何执行的?
我正在对课堂幻灯片进行一些修改,上面说构造函数是按以下方式执行的:Java 构造函数是如何执行的?,java,jvm,initialization,Java,Jvm,Initialization,我正在对课堂幻灯片进行一些修改,上面说构造函数是按以下方式执行的: 如果构造函数以此开头,则递归执行指定的构造函数,然后转到步骤4 调用显式或隐式指示的超类构造函数(除非该类是java.lang.Object) 按照该类中声明的顺序初始化对象的字段 执行此构造函数主体的其余部分 我不明白的是,构造函数永远不能用这个“开始”,因为即使它不形成类层次结构/关系,默认情况下也会插入super() 这与上面的描述有什么关系?构造函数(对于除java.lang.Object之外的每个类)必须以“super
java.lang.Object
)这与上面的描述有什么关系?构造函数(对于除java.lang.Object之外的每个类)必须以“super()”开头以调用其超类的构造函数,或者以“this()”开头以调用同一类的另一个构造函数。如果在构造函数中不包含这两个函数中的任何一个,编译器将插入对super()的调用。构造函数可以从调用同一类中的另一个构造函数开始,只要最终调用该类中调用超类构造函数的构造函数即可。我认为你说得不对,或者我不理解这个问题。从: 如果构造函数主体不是以显式构造函数开头 调用和正在调用的构造函数 声明不是原始的一部分 类对象,然后是构造函数 主体由 编译器以超类开始 构造函数调用“super();”,一个 调用其 不带 争论 因此,构造函数可以从调用同一类的另一个构造函数的
this(…)
开始。仅当调用的构造函数不是以this(…)或super(…)开头时,才会自动调用super()
我想说的是,在构造了一个对象之后,super(…)已经被调用(如果类不是java.lang.object)。这里是一个使用
这个(…)
构造函数体中的第一条语句应该是this或super,如果没有任何内容,则defalt编译器会保留super()关键字(没有参数)。 因此,构造函数主体以这种方式执行:
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