Java类加载顺序

  1. 对于一个类初始化顺序为:
    1.1 静态成员变量或静态代码块初始化(静态代码块也可以看成是一个成员变量)
    1.2 成员变量
    1.3 构造函数初始化
package com.laibaocen.javacode.test03;

public class Being {
    private String name;
    private String order;
    Being(){
        System.out.println("Being无参构造器初始化");
    }
    Being(String name){
        System.out.println("Being有参构造器初始化:" + name);
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        System.out.println("设置:name" + name);
        this.name = name;
    }

    public String getOrder() {
        return order;
    }

    public void setOrder(String order) {
        this.order = order;
    }
}
package com.laibaocen.javacode.test03;
public class StaticTest {
    static Being being = new Being();
    Being being1 = new Being("成员变量being1");
    static {
        System.out.println("静态代码块初始化");
        if(being==null){
            System.out.println("静态变量being为空");
            being = new Being("静态变量Being初始化");
        }
        String sg = "静态代码块中的变量";
        System.out.println(sg);
    }
    static Being being2 = new Being("成员变量Being2");
    static {
        System.out.println("静态代码块2初始化");
    }

    StaticTest(){
        System.out.println("StaticTest被初始化");
    }

    public static void main(String[] args) {
        new StaticTest();
    }

}

// 输出结果
/**
Being无参构造器初始化 — 静态成员变量
静态代码块初始化 — 静态代码块
静态代码块中的变量 — 静态代码块
Being有参构造器初始化:成员变量Being2 — 静态成员变量
静态代码块2初始化 — 静态代码块
Being有参构造器初始化:成员变量being1 — 成员变量
StaticTest被初始化 — 构造器
*/

  1. 继承关系中的初始化顺序
    2.1 先初始化父类中的静态成员或者静态代码块
    2.2 再初始资料的静态成员或者静态代码块
    2.3 再初始化父类中的成员变量
    2.4 初始化父类的无参构造器
    2.6 再初始化子类的成员变量
    2.7 最后初始化子类的构造器
 package com.laibaocen.javacode.test04;
        
        public class Food {
        
            Food(String name){
                System.out.println(name);
            }
        
        }
package com.laibaocen.javacode.test04;

public class Being {

    static Food food = new Food("父类静态变量:玉米");
    static {
        System.out.println("父类静态代码块儿");
        if(food == null){
            System.out.println("静态成员变量未初始化");
        }
        String staticCode = "父类静态代码块中变量";
        System.out.println(staticCode);
    }
    Food food3 = new Food("父类成员变量1");
    static Food food2 = new Food("父类静态变量:蘑菇");
    Being(){
        System.out.println("Being无参构造器初始化");
    }
    Being(String name){
        System.out.println("Being有参构造器初始化:" + name);
    }
}
package com.laibaocen.javacode.test04;

public class HumanBeing extends Being {
    static Food food = new Food("子类静态变量:玉米");
    static {
        System.out.println("子类静态代码块儿");
        if(food == null){
            System.out.println("静态成员变量未初始化");
        }
        String staticCode = "子类静态代码块中变量";
        System.out.println(staticCode);
    }
    Food food3 = new Food("子类成员变量");
    static Food food2 = new Food("子类静态变量:蘑菇");
    HumanBeing(){
        System.out.println("子类构造器初始化");
    }

    public static void main(String[] args) {
        new HumanBeing();
    }
}
执行测试结果为:
父类静态变量:玉米
父类静态代码块儿
父类静态代码块中变量
父类静态变量:蘑菇
子类静态变量:玉米
子类静态代码块儿
子类静态代码块中变量
子类静态变量:蘑菇
父类成员变量1
Being无参构造器初始化
子类成员变量
子类构造器初始化

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值