运行结果?

winer_mokou 2008-02-24 06:49:07
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”吗?
...全文
93 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
joyyq 2008-02-24
  • 打赏
  • 举报
回复
正确的输出结果是: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步
yuanjianbin 2008-02-24
  • 打赏
  • 举报
回复
写错了,应该是:
1
a
2
b
2
b
yuanjianbin 2008-02-24
  • 打赏
  • 举报
回复
ad=new B();我觉得这一行应该是ab=new B();

如果是这样的话我觉得答案应该是:
1
a
2
b
a
b
yue5346 2008-02-24
  • 打赏
  • 举报
回复
运行结果很简单,要知道静态 只能调用一次,所以它构造多少个跟它没有关系。
最后的答案:1a2b2b
pastom 2008-02-24
  • 打赏
  • 举报
回复
1a2b2b
老紫竹 2008-02-24
  • 打赏
  • 举报
回复
ab 还是 ad
明显的印刷错误! 粗制滥造的书籍。
winer_mokou 2008-02-24
  • 打赏
  • 举报
回复
A ab=new B(); 运行到这输出1a2b

A ab=new B();
ad=new B();
运行到这输出1a2b2b

这本书上弄错了 印的是1a2bab Thank you
老紫竹 2008-02-24
  • 打赏
  • 举报
回复
不可能吧,你的输出全部是错的哦
1
a
2
b
2
b

这个是我预测的!

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧