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)最后加载子类的构造方法

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值