黑马程序员技术交流社区

标题: 这段代码运行结果是什么? [打印本页]

作者: 张鹏宇    时间: 2014-5-17 23:26
标题: 这段代码运行结果是什么?
本帖最后由 张鹏宇 于 2014-5-19 15:41 编辑
  1. class A{

  2. static{

  3. System.out.print("1");

  4. }

  5. public A(){

  6. System.out.print("2");

  7. }

  8. }

  9. class B extends A{

  10. static{

  11. System.out.print("a");

  12. }

  13. public B(){

  14. System.out.print("b");

  15. }

  16. }

  17. public class Hello{

  18. public static void main(String[] ars){

  19. A ab = new B();

  20. ab = new B();

  21. }

  22. }
复制代码

作者: 孟祥钰    时间: 2014-5-17 23:46
1a2b2b
这个有什么疑问么。。
作者: java木    时间: 2014-5-18 09:06
应该是1a2b1a2b
作者: Porsche911    时间: 2014-5-18 16:05
java木 发表于 2014-5-18 09:06
应该是1a2b1a2b

一楼的答案是正确的,我也确实运行并确认了一下。静态代码块只会在加载该类的时候运行一次,并且只运行这一次,因此1a只打印一次,而构造函数是随着该类的实例对象的创建而运行,因此创建几个对象就运行几次构造函数,因此2b打印两次。
作者: 雨落千木的时节    时间: 2014-5-18 17:24
我在eclipse上运行结果:1a2b2b,这个是父类引用继承子类对象,毕老师讲过毕老师和毕姥爷的例子,首先应该是静态的,这个没问题,然后B继承A先打印2,再打印b,ab=new B();表示又执行一次,但是,静态在类加载时只执行一次,所以此时不再执行,只打印2b
作者: 小小6456    时间: 2014-5-18 17:50
学习了。。。。
作者: 波涛    时间: 2014-5-18 18:14
代码令人头大,一同学习下!
作者: 张鹏宇    时间: 2014-5-18 22:47
表示这种事情不运行才能学到东西,都运行一下才知道就是真码农啊
作者: tc4892998    时间: 2014-5-18 22:58
开发中有这么写的咩?
作者: 张鹏宇    时间: 2014-5-19 15:34
tc4892998 发表于 2014-5-18 22:58
开发中有这么写的咩?

这个真的有
作者: tc4892998    时间: 2014-5-20 21:08
张鹏宇 发表于 2014-5-19 15:34
这个真的有

哦,我刚学完代码块这,感觉这个题略显复杂- -
作者: 丁绍然    时间: 2014-5-20 22:16
静态方法值加载一次,所以是1a2b2b 。
谁运行下试一试




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2