黑马程序员技术交流社区

标题: java中父类和子类都有构造方法时,子类对象的初始化过程 [打印本页]

作者: 张云飞    时间: 2013-8-21 14:05
标题: java中父类和子类都有构造方法时,子类对象的初始化过程
本帖最后由 张云飞 于 2013-9-17 16:28 编辑

先看一个代码例子(如果感觉有点乱的话,建议自己边思考边自己写着玩):
  1. class Fruit{
  2.         public static String Fruit_name = "Fruit静态变量";        
  3.         public String color = "Fruit非静态变量";
  4.         static{
  5.                 System.out.println(Fruit_name);        //若将Fruit_name的初始化放在static程序块后边,则编译错误,说明static成员变量及代码块级别相同,只看向后顺序
  6.                 //System.out.println(color);        //此时color还未初始化
  7.                 System.out.println("Fruit的Static程序块");
  8.         }
  9.         
  10.         public Fruit(){
  11.                 System.out.println("Fruit()");
  12.         }
  13.         
  14.         {                                                                        //虽然在构造函数后边,却先执行
  15.                 System.out.println("---------------");
  16.                 System.out.println(color);
  17.                 System.out.println("Fruit非Static程序块");
  18.         }
  19. }
  20. public class Apple extends Fruit{
  21.         public static String apple_name = "appale静态变量";
  22.         public String apple_color = "Apple非静态变量";
  23.         static{
  24.                 System.out.println(apple_name);
  25.                 //System.out.println(apple_color);        //此时apple_color还未初始化
  26.                 System.out.println("Apple的Static程序块");
  27.         }
  28.         {
  29.                 System.out.println("---------------");
  30.                 System.out.println(apple_color);
  31.                 System.out.println("Apple非Static程序块");
  32.         }
  33.         public Apple(){
  34.                 System.out.println("appale()");
  35.         }
  36.         public static void main(String args[]){
  37.                 new Apple();
  38.         }
  39. }
复制代码
初始化次顺序为:
1、父类静态成员变量和静态代码块(看代码中向后顺序执行) --> 子类静态成员变量和静态代码块(看代码中向后顺序执行)
2、父类非静态成员变量和非静态代码块(看代码中向后顺序执行) --> 父类构造方法
3、子类非静态成员变量和非静态代码块(看代码中向后顺序执行) --> 子类构造方法

建议按照自己的思路重新编写一下代码,理解更清楚。










作者: 许庭洲    时间: 2013-8-27 19:26
值得学习ing!




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