课后作业(三)
(一)如果类提供了一个自定义的构造方法,将导致系统不再提供默认构造方法。
(二)静态初始化块的执行顺序
1 class Root 2 { 3 static 4 { 5 System.out.println("Root的静态初始化块"); 6 } 7 { 8 System.out.println("Root的普通初始化块"); 9 } 10 public Root() 11 { 12 System.out.println("Root的无参数的构造器"); 13 } 14 } 15 class Mid extends Root 16 { 17 static 18 { 19 System.out.println("Mid的静态初始化块"); 20 } 21 { 22 System.out.println("Mid的普通初始化块"); 23 } 24 public Mid() 25 { 26 System.out.println("Mid的无参数的构造器"); 27 } 28 public Mid(String msg) 29 { 30 //通过this调用同一类中重载的构造器 31 this(); 32 System.out.println("Mid的带参数构造器,其参数值:" + msg); 33 } 34 } 35 class Leaf extends Mid 36 { 37 static 38 { 39 System.out.println("Leaf的静态初始化块"); 40 } 41 { 42 System.out.println("Leaf的普通初始化块"); 43 } 44 public Leaf() 45 { 46 //通过super调用父类中有一个字符串参数的构造器 47 super("Java初始化顺序演示"); 48 System.out.println("执行Leaf的构造器"); 49 } 50 51 } 52 53 public class TestStaticInitializeBlock 54 { 55 public static void main(String[] args) 56 { 57 new Leaf(); 58 59 60 } 61 }
1.静态初始化块只执行一次。
2.创建子类型的对象时,也会导致父类型的静态初始化块的执行。