class A{
static{
System.out.println("1");
}
public A(){
System.out.println("2");
}
}
class B extends A{
static{
System.out.println("a");
}
public B(){
System.out.println("b");
}
}
public class Hello{
public static void main(String[] args){
A ab=new B();
ad=new B();
}
}output:
1a2b
1a2bab谁能告诉我为什么会显示“1a2bab”吗?

解决方案 »

  1.   

    不可能吧,你的输出全部是错的哦
    1
    a
    2
    b
    2
    b这个是我预测的!
      

  2.   

    A   ab=new   B(); 运行到这输出1a2b A   ab=new   B(); 
    ad=new   B(); 
    运行到这输出1a2b2b这本书上弄错了 印的是1a2bab Thank you
      

  3.   

    ab 还是 ad
    明显的印刷错误! 粗制滥造的书籍。
      

  4.   

    运行结果很简单,要知道静态 只能调用一次,所以它构造多少个跟它没有关系。
    最后的答案:1a2b2b
      

  5.   

    ad=new B();我觉得这一行应该是ab=new B();如果是这样的话我觉得答案应该是:
    1
    a
    2
    b
    a
    b
      

  6.   

    写错了,应该是: 




    2
      

  7.   

    正确的输出结果是:1a2b2b
    要知道为什么会有这样的输出结果首先要明白static{}代码块以及构造函数以及类继承的原理
    1. static{}定义的代码块是在类加载时就执行的,而且只执行一次,由于B继承了A,所以必须A加载完后才能加载B,所以首先执行A中的static{},然后执行B中的static{}块,所以首先输出1a
    2. A ab=new   B();要生成B的实例,由于B继承了A,所以要先构造A,然后构造B,所以紧接着输出2b
    3. 代码ab = new B();同第2步