在Java中运行构造函数代码之前是否初始化了字段?有人能解释下程序的输出吗?我认为构造函数是在实例变量之前初始化的。所以我希望输出是“XZYY”。class X {
Y b = new Y();
X() {
System.out.print("X");
}}class Y {
Y() {
System.out.print("Y");
}}public class Z extends X {
Y y = new Y();
Z() {
System.out.print("Z");
}
public static void main(String[] args) {
new Z();
}}
3 回答
哔哔one
TA贡献1854条经验 获得超8个赞
静态变量初始化器和静态初始化块(按文本顺序排列),如果类以前没有初始化的话。 函数中的超级()调用,无论是显式的还是隐式的。 实例变量初始化器和实例初始化块,按文本顺序排列。 在Super()之后保留构造函数体。
郎朗坤
TA贡献1921条经验 获得超9个赞
class X { Y b; X() { b = new Y(); System.out.print("X"); }}class Y { Y() { System.out.print("Y"); }}public class Z extends X { Y y; Z() { y = new Y(); System.out.print("Z"); } public static void main(String args[]) { new Z(); }}
y
调用 Z
的默认构造函数。 X
第一行 X
构造器 new Y()
叫做。 打印Y 打印X 调用构造函数Z中的第一行 new Y()
列印 Y
打印Z
添加回答
举报
0/150
提交
取消