面试小结(静态代码块执行顺序)

面试小结(关于静态代码块执行顺序)

先上代码:

这里有个A类

public class A{

	static{
		System.out.println(1);
	}
	
	public A(){
		System.out.println(2);
	}

这里有个B类继承了A类

public class B extends A{
    static{
        System.out.println("a");
    }
    public B(){
         System.out.println("b");
    }
}

有一个main方法执行以下代码

public static void main(String[] args) {
    //A静态块->B静态块->A构造方法->B构造方法
    A ab = new B();
   
   //A构造方法->B构造方法
    ab = new B();
} 

执行结果为1a2b2b


总结:

在静态代码块中,静态块执行>构造器>普通类方法。

这道题,单就考察了一个知识点,就是当类被调用的时候静态块只初始化一次。还涉及到了一个父类型的引用指向子类型对象,我们将其称之为“向上造型”。本题在执行A ab = new B()时,先执行了父类A的静态块,然后执行了子类B的静态块,执行了A类的构造方法,执行了B类的构造方法。之后执行ab = new B()再次创建一个B对象时,我们发现A,B类的静态块不执行了,只执行了构造方法!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值