A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张鹏宇 中级黑马   /  2014-5-17 23:26  /  1779 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张鹏宇 于 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. }
复制代码

11 个回复

倒序浏览
1a2b2b
这个有什么疑问么。。
回复 使用道具 举报
java木 来自手机 中级黑马 2014-5-18 09:06:50
藤椅
应该是1a2b1a2b
回复 使用道具 举报

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

这个真的有
回复 使用道具 举报

哦,我刚学完代码块这,感觉这个题略显复杂- -
回复 使用道具 举报
静态方法值加载一次,所以是1a2b2b 。
谁运行下试一试
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马