java 程序初始化过程

2018-05-11 16:58:23   最后更新: 2018-05-14 14:39:14   访问数量:40




此前的日志中我们介绍了 java 的基本语法,本篇日志中,我们就通过一系列实例,来验证 java 的初始化过程

 

// Parent.java package techlog; /** * * @author 龙泉居士 * Environment Eclipse 3.7.2 JDK 7u2 * CopyRight copy is promised if you keep this statement * Date 2012-2-2 * */ class Tip { public Tip(String str) { System.out.println(str); } } public class Parent { public Parrent() { System.out.println("I'm Parrent"); say(); } public void say() { System.out.println("Parrent.say "+i); } public int i=5; static Tip t=new Tip("Parrent.stcTip"); public Tip t0=new Tip("Parrent.Tip"); } class Son extends Parrent { public Son() { System.out.println("I'm Son"); System.out.println("i="+i); i=7; } public int i=3; static Tip t=new Tip("Son.stcTip"); public Tip t0=new Tip("Son.Tip0"); public Tip t1=new Tip("Son.Tip"); public void say() { System.out.println("Son.say "+i); } } class Daughter extends Parrent { public Daughter() { System.out.println("I'm Daughter"); } static Tip t=new Tip("Daughter.stcTip"); public Tip t0=new Tip("Daughter.Tip"); static public void main (String [] args) { Son s=new Son(); System.out.println(s.i); } }

 

 

/*Output:

Parrent.stcTip

Daughter.stcTip

Son.stcTip

Parrent.Tip

I'm Parrent

Son.say 0

Son.Tip0

Son.Tip

I'm Son

i=3

7

*///:~

 

  1. 加载main方法所在类Daughter
  2. 加载Daughter父类Parent
  3. 加载Parent父类Object
  4. 按加载层次,即类继承层次,依次初始化Object,Parent,Daughter类的static域
  5. 执行main方法
  6. 例中main方法创建了一个Son对象s
  7. 加载Son
  8. 加载Son的父类Parent
  9. 加载Parent的父类Object
  10. 按照加载层次即继承层次依次初始化类static域,对于已初始化过的static域,不在重复进行
  11. 将Son类内所有非static非final成员初始化为0 (i=0)
  12. 执行Son构造器
  13. Son构造器中第一条语句执行Son父类Parent构造器
  14. 将Parent类内所有非static非final成员初始化为0
  15. 在Parent构造器中第一条语句执行Parent的父类Object的构造器
  16. 初始化Object非static非final域
  17. 继续执行Object构造器其他语句
  18. 初始化Parent非static非final域
  19. 继续执行Parent构造器其他语句(注意,由于多态性,无论在执行的是哪个构造器this引用均为Son类引用,而Son类此时所有非static非final域均为0)
  20. 初始化Son非static非final域 (i=3)
  21. 继续执行Son构造器其他代码 (i=7)
  22. 初始化工作完毕

 

  1. 加载 main 方法所在类
  2. 递归加载父类
  3. 从父类到子类递归初始化 static 成员
  4. 从父类到子类顺序初始化成员变量、调用构造方法

 






技术帖      龙潭书斋      初始化      java      类加载     


京ICP备15018585号