\(^)/ 继承关系中static代码块跟普通代码块的执行顺序
\(^_^)/ 继承关系中static代码块和普通代码块的执行顺序
一、父子类中都是static代码块:
class Parent{ static{ System.out.println(1); } public Parent(){ System.out.println("Parent"); } } class Son extends Parent{ static{ System.out.println(2); } public Son(){ System.out.println("Son"); } } public class Test { public static void main(String[] args) { Parent p = new Son(); //或Son p = new Son(); } } 输出: 1 2 Parent Son
二、父子类中都是普通代码块
class Parent { { System.out.println(1); } public Parent() { System.out.println("Parent"); } } class Son extends Parent { { System.out.println(2); } public Son() { System.out.println("Son"); } } public class Test { public static void main(String[] args) { Parent p = new Son(); //或Son p = new Son(); } } 输出: 1 Parent 2 Son
三、父类普通代码块,子类static代码块
class Parent { { System.out.println(1); } public Parent() { System.out.println("Parent"); } } class Son extends Parent { static { System.out.println(2); } public Son() { System.out.println("Son"); } } public class Test { public static void main(String[] args) { Parent p = new Son(); //或 Son p = new Son(); } } 输出: 2 1 Parent Son
四、父类static代码块,子类普通代码块
class Parent { static{ System.out.println(1); } public Parent() { System.out.println("Parent"); } } class Son extends Parent { { System.out.println(2); } public Son() { System.out.println("Son"); } } public class Test { public static void main(String[] args) { Parent p = new Son(); //或 Son p = new Son(); } } 输出: 1 Parent 2 Son