Java对象初始化过程各部分加载顺序

一.Java对象初始化顺序
 0. 父类静态成员变量
 1. 父类静态代码块
 2. 子类静态成员变量
 3. 子类静态代码块
 4. 父类成员变量
 5. 父类非静态代码块
 6. 父类构造器
 7. 子类成员变量
 8. 子类非静态代码块
 9. 子类构造器
二.代码实现
 public class InitializeSon extends InitializeFather {
    private static int si1 = getStaticVariable();
    private int mi1 = getMemberVariable();

    private int getMemberVariable() {
        System.out.println("Son Member variable");
        return 5;
    }

    private static int getStaticVariable() {
        System.out.println("Son Static variable");
        return 4;
    }

    static {
        System.out.println("Son Static block");
    }

    {
        System.out.println("Son Non static block");
    }

    InitializeSon() {
        System.out.println("Son Constructor");
    }

    public static void main(String[] args) {
        InitializeSon initializeSon = new InitializeSon();
//        InitializeFather initializeFather = new InitializeFather();
//        InitializeGrandfather initializeGrandfather = new InitializeGrandfather();
    }
}

class InitializeFather extends InitializeGrandfather {
    private static int si2 = getStaticVariable();
    private int mi2 = getMemberVariable();

    private int getMemberVariable() {
        System.out.println("Father Member variable");
        return 5;
    }

    private static int getStaticVariable() {
        System.out.println("Father Static variable");
        return 4;
    }

    static {
        System.out.println("Father Static block");
    }

    {
        System.out.println("Father Non static block");
    }

    InitializeFather() {
        System.out.println("Father Constructor");
    }
}

class InitializeGrandfather {
    private static int si3 = getStaticVariable();
    private int mi3 = getMemberVariable();

    private int getMemberVariable() {
        System.out.println("Grandfather Member variable");
        return 5;
    }

    private static int getStaticVariable() {
        System.out.println("Grandfather Static variable");
        return 4;
    }

    static {
        System.out.println("Grandfather Static block");
    }

    {
        System.out.println("Grandfather Non static block");
    }

    InitializeGrandfather() {
        System.out.println("Grandfather Constructor");
    }
}
三.运行结果
Grandfather Static variable
Grandfather Static block
Father Static variable
Father Static block
Son Static variable
Son Static block
Grandfather Member variable
Grandfather Non static block
Grandfather Constructor
Father Member variable
Father Non static block
Father Constructor
Son Member variable
Son Non static block
Son Constructor
四.总结
 Java对象在初始化过程当中各成员的加载顺序特点如下:
   1.先父类,后子类
   2.先静态,后成员
   3.先成员变量,后代码块,末尾再接构造器
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Match_h

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值