1.
问题:
请运行 TestStaticInitializeBlock.java 示例, 观察输出结果, 总结出 "静态初始化块的执行顺序".
- class Root
- {
- static{
- System.out.println("Root 的静态初始化块");
- }
- {
- System.out.println("Root 的普通初始化块");
- }
- public Root()
- {
- System.out.println("Root 的无参数的构造器");
- }
- }
- class Mid extends Root
- {
- static{
- System.out.println("Mid 的静态初始化块");
- }
- {
- System.out.println("Mid 的普通初始化块");
- }
- public Mid()
- {
- System.out.println("Mid 的无参数的构造器");
- }
- public Mid(String msg)
- {
- // 通过 this 调用同一类中重载的构造器
- this();
- System.out.println("Mid 的带参数构造器, 其参数值:" + msg);
- }
- }
- class Leaf extends Mid
- {
- static{
- System.out.println("Leaf 的静态初始化块");
- }
- {
- System.out.println("Leaf 的普通初始化块");
- }
- public Leaf()
- {
- // 通过 super 调用父类中有一个字符串参数的构造器
- super("Java 初始化顺序演示");
- System.out.println("执行 Leaf 的构造器");
- }
- }
- public class TestStaticInitializeBlock
- {
- public static void main(String[] args)
- {
- new Leaf();
- }
- }
总结:
1, 静态初始化块只执行一次.
2, 创建子类型的对象时, 也会导致父类型的静态初始化块的执行.
动手动脑
来源: http://www.bubuko.com/infodetail-3366584.html