先来看一段程序:
class Td{
public Td(){
System.out.println("td");
}
static {
System.out.println("static td");
}
}
public class Test extends Td {
public Test(){
System.out.println("test");
}
static {
System.out.println("static test");
}
public static void main(String args[]){
Test t=new Test();
}
}
输出结果是:
static td
static test
td
test
这个结果可能会让很多人意外,在一般情况下,子类会覆盖掉父类的构造方法,而父类的方法不应该再出现。
那么为什么加了static关键字后就会有这样子的效果呢?
原因就在于static{}函数,其会在类被加载的时候执行且仅会被执行一次。
因此,在程序加载的时候(还未运行),就会先运行两个static{},并且会对构造函数进行初始化工作,
因此不管是父类还是子类的构造方法都会被调用。