最近面试,被问到一道题,父类和子类都有静态初始化块代码,
其中包含输出语句,先执行哪个。
因为从代码维护的角度,我一般只是在初始化静态容器数据时,使用static块,
所以并不是很清楚,直观的认为是先父类,后子类。
面试官说,父类的不会被执行。
心下存怀疑
回来写代码一试,果然如我所想。
可能面试官是在用spring容器时,又想用 static初始化块。
但是Spring中类的生存周期和bean的周期有很大间隔,可能漏看了……
代码如下
输出结果是
aclass
bclass
其中包含输出语句,先执行哪个。
因为从代码维护的角度,我一般只是在初始化静态容器数据时,使用static块,
所以并不是很清楚,直观的认为是先父类,后子类。
面试官说,父类的不会被执行。
心下存怀疑
回来写代码一试,果然如我所想。
可能面试官是在用spring容器时,又想用 static初始化块。
但是Spring中类的生存周期和bean的周期有很大间隔,可能漏看了……
代码如下
public class Aclass {
protected static Map<String, String> data;
static {
data = new HashMap<String, String>();
data.put("adfdasf","sdfadsf");
System.out.println("aclass");
}
}
public class BClass extends Aclass {
static Map<String, String> map;
static {
map = new HashMap<String, String>();
map.put("sdf","hhaha");
System.out.println("bclass");
}
public static void main(String[] args) {
BClass b = new BClass();
}
}
输出结果是
aclass
bclass