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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 夏诗瑶 于 2012-9-28 13:05 编辑
  1. package cn.itcast;

  2. class Fu {
  3.         protected String name = "李四";
  4.         protected int age = 6;
  5.         static {
  6.                 System.out.println("父类静态代码块,给类初始化用的。");
  7.         }
  8.         {
  9.                 System.out.println("父类构造代码块,给对象初始化用的。");
  10.         }

  11.         public Fu() {
  12.                 System.out.println("父类构造函数,给对象初始化用的。");
  13.         }
  14. }

  15. class Zi extends Fu {
  16.         static {
  17.                 System.out.println("子类静态代码块,给类初始化用的。");
  18.         }
  19.         {
  20.                 System.out.println("子类构造代码块,给对象初始化用的。");
  21.         }

  22.         public Zi(String name, int age) {
  23.                 this.name = name;
  24.                 this.age = age;
  25.                 System.out.println("子类构造函数,给对象初始化用的。");
  26.                 System.out.println(name + "  " + age);
  27.         }
  28. }

  29. public class Test {
  30.         public static void main(String[] args) {
  31.                 Zi z = new Zi("光头哥", 26);
  32.                 // 1、因为new用到了Zi.class,并且子类继承了父类。所以会先找到Fu.class,再找到Zi.class文件并加载到内存中
  33.                 // 2、执行 父类静态代码块
  34.                 // 3、执行子类静态代码块
  35.                 // 4、在堆内存中开辟空间,分配内存地址
  36.                 // 5、对 父类属性 默认初始化(名字默认为空),显式初始化(如题中"李四")
  37.                 // 6、父类构造代码块
  38.                 // 7、父类构造函数
  39.                 // 8、在堆内存中建立对象的特有属性,并进行子类对象的默认初始化
  40.                 // 9、对子类对象的属性显式初始化
  41.                 // 10、子类构造代码块
  42.                 // 11、子类构造函数
  43.                 // 12、将内存地址付给栈内存中的z变量
  44.         }

  45. }
复制代码

评分

参与人数 2技术分 +1 黑马币 +1 收起 理由
创出一片辉煌 + 1 哎!我来晚了
王海宇 + 1 赞一个!

查看全部评分

2 个回复

倒序浏览
这个必须有,虽然我不需要了~~
这个问题好多面试官都喜欢问,给你个代码让你说出顺序。
回复 使用道具 举报
顶一下。好东西。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马