关于种初始化顺序
关于类初始化顺序
昨天看了篇论坛的文章,谈的是继承类的初始化顺序,因为以前没有接触过,所以,回去写了一遍,也算是让作为菜鸟的我加深下印象和理解吧。
一、首先谈的是类的初始化顺序:
类的初始化顺序对于静态变量、静态初始化块、变量、初始化块、构造器,
它们的初始化顺序以此是
(静态变量、静态初始化块)>(变量、初始化块)>构造器
下面是示例代码
二、如果是继承类,子类的初始化并不是完全都在父类初始化后再进行,子类的静态变量和静态初始化块是在父类前完成初始化的。
示例代码
三、静态变量和静态初始化块是依照他们在类中的定义顺序进行初始化,类似的变量和初始化块也是按照出现的先后顺序进行初始化的。
注意的是,构造器是在这几个当中最后初始化的,不管它出现的位置
示例代码
昨天看了篇论坛的文章,谈的是继承类的初始化顺序,因为以前没有接触过,所以,回去写了一遍,也算是让作为菜鸟的我加深下印象和理解吧。
一、首先谈的是类的初始化顺序:
类的初始化顺序对于静态变量、静态初始化块、变量、初始化块、构造器,
它们的初始化顺序以此是
(静态变量、静态初始化块)>(变量、初始化块)>构造器
下面是示例代码
/** * 类的初始化顺序 * 对于静态变量、静态初始化块、变量、初始化块、构造器, * 它们的初始化顺序以此是(静态变量、静态初始化块)>(变量、初始化块)>构造器 * @author ☞alading * */ public class InitialOrderTest { //静态变量 public static String staticField = "静态变量"; //变量 public String field = "变量"; //静态初始化块 static{ System.out.println(staticField); System.out.println("静态初始化块"); } //初始化块 { System.out.println(field); System.out.println("初始化块"); } //构造器 public InitialOrderTest(){ System.out.println("构造器"); } public static void main(String[] args) { new InitialOrderTest(); } } /* 运行结果: 静态变量 静态初始化块 变量 初始化块 构造器 */
二、如果是继承类,子类的初始化并不是完全都在父类初始化后再进行,子类的静态变量和静态初始化块是在父类前完成初始化的。
示例代码
/** * 子类的初始化并不是完全都在父类初始化后再进行,子类的静态变量和静态初始化块是在父类前完成初始化的 * @author ☞alading * */ public class SubClass extends Parent { //静态变量 public static String s_StatisField = "子类--静态变量"; //变量 public String s_Field = "子类--变量"; //静态初始化块 static{ System.out.println(s_StatisField); System.out.println("子类--静态初始化块"); } //初始化块 { System.out.println(s_Field); System.out.println("子类--初始化块"); } //构造器 public SubClass(){ System.out.println("子类--构造器"); } //程序入口 public static void main(String[] args) { new SubClass(); } } /* * 父类 */ class Parent{ //静态变量 public static String p_StatisField = "父类--静态变量"; //变量 public String p_Field = "父类--变量"; //静态初始化块 static{ System.out.println(p_StatisField); System.out.println("父类--静态初始化块"); } //初始化块 { System.out.println(p_Field); System.out.println("父类--初始化块"); } //构造器 public Parent(){ System.out.println("父类--构造器"); } } /* * 运行结果 父类--静态变量 父类--静态初始化块 子类--静态变量 子类--静态初始化块 父类--变量 父类--初始化块 父类--构造器 子类--变量 子类--初始化块 子类--构造器 */
三、静态变量和静态初始化块是依照他们在类中的定义顺序进行初始化,类似的变量和初始化块也是按照出现的先后顺序进行初始化的。
注意的是,构造器是在这几个当中最后初始化的,不管它出现的位置
示例代码
/** * 静态变量和静态初始化块是依照他们在类中的定义顺序进行初始化 * @author ☞alading * */ public class TestOrder { //静态变量 public static TestA a = new TestA(); //静态初始化块 static{ System.out.println("静态初始化块"); } //静态变量 public static TestB b = new TestB(); public static void main(String[] args) { new TestOrder(); } } class TestA{ public TestA(){ System.out.println("Test--A"); } } class TestB{ public TestB(){ System.out.println("Test--B"); } } /* Test--A 静态初始化块 Test--B */