最近面试,被问到一道题,父类和子类都有静态初始化块代码,
其中包含输出语句,先执行哪个。
因为从代码维护的角度,我一般只是在初始化静态容器数据时,使用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
本文探讨了Java类中静态初始化块的执行顺序,特别关注父类与子类的关系,并通过实例展示了在Spring容器环境下类生命周期与Bean周期的区别。通过代码实验验证了预期行为,加深了对Java类初始化机制的理解。
816

被折叠的 条评论
为什么被折叠?



