java类初始化顺序学习笔记(抄书学习,强化记忆)

示例代码1:

/**
 * 类的初始化顺序
 * (无显示继承)
 *
 * @author lawt
 * @date 2019年1月16日
 */
public class InitialOrderTest {
    /**
     * 静态变量
     */
    private static String STATIC_FIELD = "静态变量";
    /**
     * 变量
     */
    private String field = "变量";
    // 静态初始化块
    static {
        System.out.println(STATIC_FIELD);
        System.out.println("静态初始化块");
    }

    // 初始化块
    {
        System.out.println("***********************************");
        System.out.println(field);
        System.out.println("初始化块");
    }

    /**
     * 构造器
     */
    public InitialOrderTest() {
        System.out.println("构造器");
    }

    public static void main(String[] args) {
        new InitialOrderTest();
        System.out.println("--------------------------------------");
        new InitialOrderTest();
    }
}

运行结果如下:

静态变量
静态初始化块
***********************************
变量
初始化块
构造器
--------------------------------------
***********************************
变量
初始化块
构造器

加载顺序为:

所以顺序为:

静态成员、静态块----普通成员、非静态块---构造函数

示例代码2:

/**
 * 有继承关系的类初始化顺序
 *
 * @author lawt
 * @date 2018年7月5日
 */
class Parent {
    // 静态变量
   public static String STATIC_FIELD
             = "父类--静态变量";
    protected int i = 1;
    protected int j = 8;
    // 变量
    public String p_Field = "父类--变量";
    // 静态初始化块
    static {
        System.out.println(STATIC_FIELD);
        System.out.println("父类--静态初始化块");
    }

    // 初始化块
    {
        System.out.println(p_Field);
        System.out.println("父类--初始化块");
    }

    // 构造器
    public Parent() {
        System.out.println("父类--构造器");
        System.out.println("i=" + i + ", j=" + j);
        j = 9;
    }

    public void test() {
        System.out.println("父类---test");
        System.out.println("父类---i=" + i);
    }
}
/**
 * 类的初始化顺序
 *
 * @author lawt
 * @date 2019年1月16日
 */
public class SubClass extends Parent {

    // 静态变量
    public static String s_StaticField = "子类--静态变量";
    // 变量
    public String s_Field = "子类--变量";
    public int i = 0;
    // 静态初始化块
    static {
        System.out.println(s_StaticField);
        System.out.println("子类--静态初始化块");
    }

    // 初始化块
    {
        System.out.println(s_Field);
        System.out.println("子类--初始化块");
    }

    // 构造器
    public SubClass() {
        System.out.println("子类--构造器");
        System.out.println("i=" + i + ",j=" + j);
    }

    @Override
    public void test() {
        System.out.println("子类---test");
        System.out.println("子类---i=" + i);
    }

    // 程序入口
    public static void main(String[] args) {
        Parent parent = new SubClass();
        System.out.println("**Parent parent = new SubClass()**" + parent.i);
        System.out.println("**Parent parent = new SubClass()**" + parent.i);
        parent.test();
        System.out.println("-----------------------------------");
        SubClass subClass = new SubClass();
        System.out.println("=======" + subClass.i);
        subClass.test();
        System.out.println("***********************************");
        Parent p = new Parent();
        System.out.println("**  Parent p = new Parent()**i=" + p.i);
        p.test();
    }
}

运行结果:

父类--静态变量
父类--静态初始化块
子类--静态变量
子类--静态初始化块
父类--变量
父类--初始化块
父类--构造器
i=1, j=8
子类--变量
子类--初始化块
子类--构造器
i=0,j=9
**Parent parent = new SubClass()**1
**Parent parent = new SubClass()**1
子类---test
子类---i=0
-----------------------------------
父类--变量
父类--初始化块
父类--构造器
i=1, j=8
子类--变量
子类--初始化块
子类--构造器
i=0,j=9
=======0
子类---test
子类---i=0
***********************************
父类--变量
父类--初始化块
父类--构造器
i=1, j=8
**  Parent p = new Parent()**i=1
父类---test
父类---i=1

顺序为:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值