黑马程序员技术交流社区

标题: 绝技。(新手宝典)复杂的子父类对象创建过程 [打印本页]

作者: 夏天    时间: 2012-9-28 12:58
标题: 绝技。(新手宝典)复杂的子父类对象创建过程
本帖最后由 夏诗瑶 于 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. }
复制代码

作者: 李建强    时间: 2012-9-28 13:09
这个必须有,虽然我不需要了~~
这个问题好多面试官都喜欢问,给你个代码让你说出顺序。
作者: 宫明星    时间: 2012-9-28 13:49
顶一下。好东西。




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