在代码中有类之间有继承关系,父类子类中均有成员变量、普通代码块、静态代码块以及构造方法,那么他们的执行顺序怎么样呢,写了两个类来判断下。
父类:Animal
package com.extends03; public class Animal { public String name = "animal1"; public int age; public static String color = "white"; //构造方法 public Animal() { name = "animal2"; System.out.println("create Animal..." + name); //先执行成员变量,再执行普通代码块,最后执行构造方法 //System.out.println(color); } //普通代码块 { name = "animal3"; System.out.println("Animal Class codeBlock"); } //静态代码块 static { color = "red"; System.out.println("Animal Class static codeBlock " + "经过静态代码块修改静态值:" + color); } public void eat() { System.out.println("Animal eat..."); } }
子类:Lion
package com.extends03; public class Lion extends Animal { public static String name = "big Lion"; public Lion() { System.out.println("create Lion..."); } public String color = "yellow"; { name = "little lion "; color = "white"; System.out.println(name); System.out.println(color);//先执行本类的成员变量,再执行本类普通代码块 System.out.println("Lion Class codeBlock"); } static { name = "super Lion"; System.out.println("Lion Calss static codeBlock "+ "经过静态代码块修改静态值:" + name); } }
测试类:
public class TestExtends { public static void main(String[] args) { Lion l = new Lion(); System.out.println("验证静态块是否是只被加载一次"); Animal a = new Animal(); } }
输出结果:
Animal Class static codeBlock 经过静态代码块修改静态值:red //1、父类静态代码块,同时说明静态变量先初始化,然后再执行静态代码块 Lion Calss static codeBlock 经过静态代码块修改静态值:super Lion //2、子类静态代码块,同时说明静态变量先初始化,然后再执行静态代码块// Animal Class codeBlock //3、父类普通代码块 create Animal...animal2 //4、父类构造方法 little lion white Lion Class codeBlock //5、子类代码块 create Lion... //6、子类构造方法 验证静态块是否是只被加载一次 //以下结果说明静态代码只在类第一次加载时执行 Animal Class codeBlock create Animal...animal2