前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java 程序初始化过程

java 程序初始化过程

作者头像
用户3147702
发布2022-06-27 12:19:08
2350
发布2022-06-27 12:19:08
举报
文章被收录于专栏:小脑斧科技博客

概述

本篇日志中,我们通过一系列实例,来验证 java 的初始化过程。

实例

代码语言:javascript
复制
// 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. 初始化工作完毕

结论 — java 初始化过程

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-06-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小脑斧科技博客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
  • 实例
  • 示例输出
  • 结论 — java 初始化过程
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档