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为什么输出结果的顺序是如此
完全不明白,感觉像刚好反了样的
哪位大哥帮忙解释下好吗

解决方案 »

  1.   

    1、类只有在使用New调用创建的时候才会被JAVA类装载器装入
    2、JAVA类首次装入时,会对静态成员变量或方法进行一次初始化
    3、创建类实例时,首先按照父子继承关系进行初始化
    4、类实例创建时候,首先初始化块部分先执行,然后是构造方法;然后从
    本类继承的子类的初始化块执行,最后是子类的构造方法
    5、类消除时候,首先消除子类部分,再消除父类部分
      

  2.   


    你这没有static块和static类成员,只看3,4,5就可以了.
      

  3.   


    构造一个类先初始化静态变量
    执行初始化块.
    构造子类时先构造父类.
    所以...
    构造P20时,先构造A,而构造A时,先执行初始化块-->打印:456
    执行构造方法-------------------------------->打印:AAA
    执行P20初始化块----------------------------->打印:123
    执行构造方法P20(),执行P20(int)-------------->打印:CCC
    执行下一句---------------------------------->打印:BBB
      

  4.   

    构造一个类先初始化静态变量
    执行初始化块.
    =====
    多加一句,这里开始执行构造方法
    ====构造子类时先构造父类.
    所以...
    构造P20时,先构造A,而构造A时,先执行初始化块-->打印:456
    执行构造方法-------------------------------->打印:AAA
    执行P20初始化块----------------------------->打印:123
    执行构造方法P20(),执行P20(int)-------------->打印:CCC
    执行下一句---------------------------------->打印:BBB
      

  5.   

    AWUSOFT()
    实在是抱歉
    我分已经给了   下次补给你好吗?