黑马程序员技术交流社区

标题: 子父类成员以及函数初始化顺序总结! [打印本页]

作者: jojo    时间: 2015-1-14 21:34
标题: 子父类成员以及函数初始化顺序总结!
  1. package com.bocsoft.study;
  2. /**
  3. *
  4. * @author jojo
  5. * 时间:2015-1-14
  6. */
  7. public class InialTest {

  8.         public static void main(String[] args) {       
  9.                 Son s = new Son();
  10.         }
  11. }

  12. class Father {
  13.         private Info info1 = new Info("父类非静态变量初始化");
  14.         private static Info info2 = new Info("父类静态变量初始化");
  15.         Father(){
  16.                 System.out.println("父类构造函数执行");
  17.         }
  18.        
  19.         static{
  20.                 Info info3 = new Info("父类静态代码块执行");
  21.         }
  22.         {
  23.                 Info info4 = new Info("父类构造代码块执行");
  24.         }
  25. }

  26. class Son extends Father{
  27.        
  28.         private Info info1 = new Info("子类非静态变量初始化");
  29.         private static Info info2 = new Info("子类静态变量初始化");
  30.        
  31.         Son(){
  32.                 System.out.println("子类构造函数执行");
  33.         }
  34.        
  35.         static{
  36.                 Info info3 = new Info("子类静态代码块执行");
  37.         }
  38.         {
  39.                 Info info4 = new Info("子类构造代码块执行");
  40.         }
  41. }

  42. class Info {
  43.         Info(String message){
  44.                 System.out.println(message);
  45.         }
  46. }
复制代码
好了,废话不多说,一个程序就能说明所有初始化顺序的问题了,送给需要的朋友了。代码可以直接copy,然后运行。需要注意的是,子类成员初始化是在父类构造函数执行之后,子类构造函数执行之前,相信不少人会忽略这一问题。
程序运行的结果如下:
父类静态变量初始化
父类静态代码块执行
子类静态变量初始化
子类静态代码块执行
父类非静态变量初始化
父类构造代码块执行
父类构造函数执行
子类非静态变量初始化
子类构造代码块执行
子类构造函数执行


作者: '丫头片子'    时间: 2015-1-14 21:51
测试到位,不错
作者: 李一白_    时间: 2015-1-14 21:59
多谢分享
作者: IcedCoffee    时间: 2015-1-14 22:10
细看程序 不叫好 只是偷偷记
作者: jinghoujiayin    时间: 2015-1-14 23:09
刚学这个,然后来巩固下,不错不错
作者: jojo    时间: 2015-1-15 20:52
嘿嘿,自己给自己顶一个!
作者: yumin    时间: 2015-1-17 18:55
不多,顶起
作者: 资博仁    时间: 2015-1-17 19:15
非常感谢




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