class A{
public A(){
System.out.println("AAA");
}
{
System.out.println("456");
}
}public class P20 extends A{
P20(){
this(12);
System.out.println("BBB");
}
P20(int x){
System.out.println("CCC");
}
{
System.out.println("123");
}
public static void main(String[] args){
new P20();
}
}输出结果为:
456
AAA
123
CCC
BBB为什么输出结果的顺序是如此
完全不明白,感觉像刚好反了样的
哪位大哥帮忙解释下好吗
public A(){
System.out.println("AAA");
}
{
System.out.println("456");
}
}public class P20 extends A{
P20(){
this(12);
System.out.println("BBB");
}
P20(int x){
System.out.println("CCC");
}
{
System.out.println("123");
}
public static void main(String[] args){
new P20();
}
}输出结果为:
456
AAA
123
CCC
BBB为什么输出结果的顺序是如此
完全不明白,感觉像刚好反了样的
哪位大哥帮忙解释下好吗
2、JAVA类首次装入时,会对静态成员变量或方法进行一次初始化
3、创建类实例时,首先按照父子继承关系进行初始化
4、类实例创建时候,首先初始化块部分先执行,然后是构造方法;然后从
本类继承的子类的初始化块执行,最后是子类的构造方法
5、类消除时候,首先消除子类部分,再消除父类部分
你这没有static块和static类成员,只看3,4,5就可以了.
构造一个类先初始化静态变量
执行初始化块.
构造子类时先构造父类.
所以...
构造P20时,先构造A,而构造A时,先执行初始化块-->打印:456
执行构造方法-------------------------------->打印:AAA
执行P20初始化块----------------------------->打印:123
执行构造方法P20(),执行P20(int)-------------->打印:CCC
执行下一句---------------------------------->打印:BBB
执行初始化块.
=====
多加一句,这里开始执行构造方法
====构造子类时先构造父类.
所以...
构造P20时,先构造A,而构造A时,先执行初始化块-->打印:456
执行构造方法-------------------------------->打印:AAA
执行P20初始化块----------------------------->打印:123
执行构造方法P20(),执行P20(int)-------------->打印:CCC
执行下一句---------------------------------->打印:BBB
实在是抱歉
我分已经给了 下次补给你好吗?