javase -- 类的加载顺序


类的加载顺序.

public class Child extends father {

    private String child = method();

    private static String staticChild = staticMethod();
    {
        System.out.println("子类普通代码块");
    }
    public Child() {
        System.out.println("子类构造器");
    }

    public static void main(String[] args) {
        System.out.println("===================子类main方法入口==================");
        new Child();
    }
    static {
        System.out.println("子类静态代码块");
    }
    public static String staticMethod() {
        System.out.println("子类的静态成员变量");
        return "子类静态方法调用";
    }
    public String method(){
        System.out.println("子类的普通成员变量");
        return "子类方法调用";
    }
}

class father extends Root{

    static {
        System.out.println("父类静态代码块");
    }
    {
        System.out.println("父类普通代码块");
    }

    private String father = method();

    private static String staticFather = staticMethod();


    public father() {
        System.out.println("父类构造器");
    }

    public static String staticMethod() {
        System.out.println("父类的静态成员变量");
        return "父类静态方法调用";
    }
    public String method(){
        System.out.println("父类的普通成员变量");
        return "父类方法调用";
    }
}

class Root{

    private String root = method();

    private static String staticRoot = staticMethod();

    static {
        System.out.println("Root类静态代码块");
    }
    {
        System.out.println("Root类普通代码块");
    }
    public Root() {
        System.out.println("Root类构造器");
    }

    public static String staticMethod() {
        System.out.println("Root类的静态成员变量");
        return "Root类静态方法调用";
    }
    public String method(){
        System.out.println("Root类的普通成员变量");
        return "Root类方法调用";
    }
}

Root类的静态成员变量
Root类静态代码块

父类静态代码块
父类的静态成员变量

子类的静态成员变量
子类静态代码块

    ===================子类main方法入口==================

子类的普通成员变量
Root类普通代码块
Root类构造器

父类普通代码块
子类的普通成员变量
父类构造器

子类的普通成员变量
子类普通代码块
子类构造器

由父及子,静态先行(静态代码块和静态变量看顺序)


文章作者: liuminkai
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 liuminkai !
评论
 上一篇
javase -- 属性赋值的先后顺序 javase -- 属性赋值的先后顺序
属性赋值的先后顺序. 默认初始化 显示初始化 / 在代码块中初始化 构造器初始化 有了对象以后,通过 对象.属性 或 对象.set方法 { a = 1;} int a; //不会报错 a = 1 int a = 2; { a = 1;}
2020-07-30
下一篇 
javase -- 代码块 javase -- 代码块
代码块. 用于初始化类或对象 分类. 静态代码块 内部可以有输出语句 随着类的加载而执行 只会执行一次 作用:初始化类信息 如果定义了多个代码块,则按照声明的先后顺序执行 只能调用静态属性或静态方法 非静态代码块 内部可以输出语句 随
2020-07-30
  目录