在Java教程-初始化字段中,有一个关于实例初始化块(Instance Initializer)的描述:
Java编译器将初始化块复制到每个构造函数中。因此,这种方法可以用于在多个构造函数之间共享一段代码。
如果释义正确,则以下代码:
输出应该是:
但实际输出是:
我是否误解了那句话的意思,或者描述不够准确?
还有一个关于显式构造函数调用的疑问:
基于两个基本原则:
- 如果存在,则另一个构造函数的调用必须是构造函数中的第一行。 - 在构造函数内部,使用 this() 调用另一个构造函数,使用 super() 调用直接超类的对应构造函数。
这是否意味着在子类的构造函数中使用 this() 会隐式地删除超类的无参构造函数的默认调用?
感谢回复。
Java编译器将初始化块复制到每个构造函数中。因此,这种方法可以用于在多个构造函数之间共享一段代码。
如果释义正确,则以下代码:
public class ConstructorTest {
public static void main(String[] args) {
Child c = new Child();
}
}
class Parent {
Parent() {
System.out.println("Parent non-argument Constructor");
}
}
class Child extends Parent {
{
System.out.println("Child Instance Initialization Block");
}
Child() {
this(2);
System.out.println("Child no-argument Constructor");
}
Child(int i) {
this(10, i);
System.out.println("Child 1-argument Constructor");
}
Child(int i, int j) {
System.out.println("Child 2-argument Constructor");
}
}
输出应该是:
Parent non-parm Constructor
Child Instance Initialization Block
Child 2-argument Constructor
Child Instance Initialization Block
Child 1-argument Constructor
Child Instance Initialization Block
Child no-argument Constructor
但实际输出是:
Parent non-argument Constructor
Child Instance Initialization Block
Child 2-argument Constructor
Child 1-argument Constructor
Child no-argument Constructor
我是否误解了那句话的意思,或者描述不够准确?
还有一个关于显式构造函数调用的疑问:
基于两个基本原则:
- 如果存在,则另一个构造函数的调用必须是构造函数中的第一行。 - 在构造函数内部,使用 this() 调用另一个构造函数,使用 super() 调用直接超类的对应构造函数。
这是否意味着在子类的构造函数中使用 this() 会隐式地删除超类的无参构造函数的默认调用?
感谢回复。