Java类的初始化顺序的实现
类初始化顺序遵循以下三个原则(优先级依次递减)
1、静态对象(变量)优先于非静态对象(变量)初始化,其中静态对象(变量)只初始化一次,而非静态对象(变量)可能会初始化多次;
2、父类优先于子类初始化;
3、成员变量按照定义先后顺序进行初始化;
例如:静态变量、非静态变量、静态代码块、非静态代码块、构造函数、父类、子类等。
他们的初始化顺序是:父类静态变量 > 父类静态代码块 > 子类静态变量 > 子类静态代码块 > 父类非静态变量 > 父类非静态代码块 > 父类构造函数 > 子类非静态变量 > 子类非静态代码块 > 子类构造函数。
1.对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序是?
public class Test1 { // 静态变量 public static String staticField = "静态变量"; // 变量 public String field = "变量"; // 静态初始化块 static { System.out.println(staticField); System.out.println("静态初始化块"); } // 初始化块 { System.out.println(field); System.out.println("初始化块"); } // 构造器 public Test1() { System.out.println("构造器"); } public static void main(String[] args) { new Test1(); } }
执行结果如下:
2.在继承场景下,对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺是?
class Parent { // 静态变量 public static String p_StaticField = "父类--静态变量"; // 变量 public String p_Field = "父类--变量"; // 静态初始化块 static { System.out.println(p_StaticField); System.out.println("父类--静态初始化块"); } // 初始化块 { System.out.println(p_Field); System.out.println("父类--初始化块"); } // 构造器 public Parent() { System.out.println("父类--构造器"); } } public class Test2 extends Parent { // 静态变量 public static String s_StaticField = "子类--静态变量"; // 变量 public String s_Field = "子类--变量"; // 静态初始化块 static { System.out.println(s_StaticField); System.out.println("子类--静态初始化块"); } // 初始化块 { System.out.println(s_Field); System.out.println("子类--初始化块"); } // 构造器 public Test2() { System.out.println("子类--构造器"); } // 程序入口 public static void main(String[] args) { new Test2(); } }
执行结果如下:
3.静态变量和静态初始化块之间、变量和初始化块之间的先后顺序又是怎样呢?
public class Test3 { // 静态变量 public static TestA a = new TestA(); // 静态初始化块 static { System.out.println("静态初始化块"); } // 静态变量 public static TestB b = new TestB(); public static void main(String[] args) { new Test3(); } } class TestA { public TestA() { System.out.println("Test--A"); } } class TestB { public TestB() { System.out.println("Test--B"); } }
执行结果如下:
到此这篇关于Java类的初始化顺序的实现的文章就介绍到这了,更多相关Java类初始化顺序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Spring Cloud集成Nacos Config动态刷新源码剖析
这篇文章主要为大家介绍了Spring Cloud集成Nacos Config动态刷新源码剖析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2022-08-08Spring Boot Mail QQ企业邮箱无法连接解决方案
这篇文章主要介绍了Spring Boot Mail QQ企业邮箱无法连接解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下2020-09-09
最新评论