class A{
public A(){
System.out.println("AAA");
}
{
System.out.println("456");
}
}public class B extends A{
B(){
this(12);
System.out.println("BBB");
}
B(int x){
System.out.println("CCC");
}
{
System.out.println("123");
}
public static void main(String[] args){
new B();
}
}
上述代码运行结果为:
456
AAA
123
CCC
BBB小弟是java初学者,老是弄不明白运行结果为什么会是那个样子,请各位大师指教一下,小弟在这里先谢过了!

解决方案 »

  1.   

    我也新学的,不知道理解的对不对
    这是JAVA的上溯吧
    先上溯到A
    再回
    我不明白{}{}连一起什么意思
    建议看下TTJ,应该有的
      

  2.   

    456 and 123 are instance initializers, which will be executed before instances are created.
    new B()----------->new A()----------->B(12) ------------->BBB
                        \- 456   AAA        \- 123  CCC       \- BBB
      

  3.   

    What is an instance initializer?
      

  4.   

    1.创建类时,会先掉用父类的构造函数
    2.类的块语句({}中的语句)会比构造函数先调用,还有一种静态块语句.
    3.没有参数的构造函数可以用this调用其它有参的构造函数
      

  5.   

    这里就涉及到初始化顺序
    -----------------
    1)new B()之前要new A();子类对象初始化之前先初始化基类
    2){System.out.println("456");}是non-static 实体初始化在构造方法之前执行
    3)this(12);调用构造方法B(int x)