java 父子类静态方法,静态变量,构造方法,普通方法加载顺序 面试题

一:案例:父类、子类、测试类

1:父类

public class ParentTest {

    private static String var1 = initStaticParent();
    private  String var2 = initStringParent();

    static{
        System.err.println("父类静态代码块");
    }
    {
        System.err.println("父类构造代码块");
    }

    public  ParentTest(){
        System.err.println("父类构造方法");
    }

    private String initStringParent(){
        System.err.println("父类普通方法给变量赋值");
        return "initStringParent";
    }

    private static String initStaticParent(){
        System.err.println("父类静态方法给变量赋值");
        return "initStringParent";
    }

}

2:子类

public class ChildTest extends ParentTest{

    static{
        System.err.println("子类静态代码块");
    }
    private static String var1 = initStaticParent();
    {
        System.err.println("子类构造代码块");
    }
    private  String var2 = initStringParent();

    public ChildTest(){
        System.err.println("子类构造方法");
    }

    private String initStringParent(){
        System.err.println("子类普通方法给变量赋值");
        return "initStringParent";
    }

    private static String initStaticParent(){
        System.err.println("子类静态方法给变量赋值");
        return "initStaticParent";
    }

}

3:测试类

public class Test1 {
    public static void main(String[] args) {
        new ChildTest();
    }
}

4:测试结果

父类静态方法给变量赋值
父类静态代码块
子类静态代码块
子类静态方法给变量赋值
父类普通方法给变量赋值
父类构造代码块
父类构造方法
子类构造代码块
子类普通方法给变量赋值
子类构造方法

二:结论

加载顺序 :
1)先加载父类的静态代码块和静态变量(谁在前先加载谁)
2)然后加载子类的静态代码块和静态变量(谁在前先加载谁)
3)其次加载父类的普通方法赋值的变量和构造代码块(谁在前先加载谁)
4)然后加载父类的构造方法
5)在然后加载子类的普通方法赋值的变量和构造代码块(谁在前先加载谁)
6)最后加载子类的构造方法

你可能感兴趣的:(Java面试题)