1.单纯无父类的类 各代码块的执行顺序
public class Man { public Man() { System.out.println(" Man构造函数运行了。。。"); } private Person person = new Person(); private static int x = 100; public static void px() { System.out.println("px 都输出了"); } static { System.out.println("静态块运行了。。。"); } private static Animal_1 animal_1 = new Animal_1(); private static Animal animal = new Animal();
}
执行结果:
x=100先执行了
静态块运行了。。。
Animal_1 run...
Animal run...
初始化了Peron类
Man构造函数运行了。。。
执行顺序:
a. 先找静态,静态模块先执行如静态变量、静态代码块等(静态方法除外),从上往下依次执行。
b. 执行非静态上述代码块。
c. 执行构造方法。到此就结束了。
2.有父类的子类,各代码块的执行顺序,其中有同名的变量和方法,有同名静态属性。
public class Bird extends Animal { public Bird() { System.out.println("Bird 构造函数...."); } public void print(){ System.out.println("I'm bird!"); } private Person person = new Person(); public static int x = 10; public static void px() { System.out.println("px 都输出了"); } static { System.out.println("Bird静态块运行了。。。"); } private static Animal_1 animal_1 = new Animal_1(); public static void pp(){ System.out.println("I'm bird pp!"); } }
public class Animal { public Animal() { System.out.println("Animal run..."); } private Person person = new Person(); public static void px() { System.out.println("px 都输出了"); } static { System.out.println("Animal静态块运行了。。。"); } public static int x = 10; private static Animal_1 animal_1 = new Animal_1(); public void print(){ System.out.println("I'm animal!"); } public static void pp(){ System.out.println("I'm animal pp!"); } }
Animal静态块运行了。。。
Animal_1 run...
Bird静态块运行了。。。
Animal_1 run...
初始化了Peron类
Animal run...
初始化了Peron类
Bird 构造函数....
执行顺序:
a. 先找父类的静态,静态模块先执行如静态变量、静态代码块(静态方法除外),从上往下依次执行。
b. 子类的静态如上顺序执行。
c. 父类非静态模块 如上按顺序执行,然后父类构造函数。
d.子类非京台模块 如上按顺序执行,然后子类构造函数。结束!