Fork me on gieee

static、构造器、代码块加载顺序

首先看看代码加结果

package com.tc.test;

public class Father {
    private int i = test();
    private static int j = method();

    static {
        System.out.println("父类-静态块 = 1");
    }

    public Father() {
        System.out.println("父类-构造器 = 2");
    }

    {
        System.out.println("父类-代码块 = 3");
    }

    private int test() {
        System.out.println("父类-成员方法 test() = 4");
        return 0;
    }

    private static int method() {
        System.out.println("父类-类方法 method() = 5");
        return 0;
    }
}
package com.tc.test;

public class Son extends Father {
    private int i = test();
    private static int j = method();

    static {
        System.out.println("子类-静态块 = 6");
    }

    public Son() {
        System.out.println("子类-构造器 = 7");
    }

    {
        System.out.println("子类-代码块 = 8");
    }

    private int test() {
        System.out.println("子类-成员方法 test() = 9");
        return 0;
    }

    private static int method() {
        System.out.println("子类-类方法 method() = 10");
        return 0;
    }
}
package com.tc.test;

import org.junit.Test;
public class Test001 {

    @Test
    public void test01(){
        Son s1 = new Son();
        System.out.println("-------------");
        Son s2 = new Son();
        System.out.println("-------------");
        Father f1 = new Father();
    }
}

 

总结:

  1.static修饰的静态优先加载

  2.父类优先子类加载

  3.代码块优先构造器加载

  4.static只加载一次

 

posted @ 2021-12-07 20:21  lovertc  阅读(155)  评论(1)    收藏  举报