zoukankan      html  css  js  c++  java
  • Java中类的初始化顺序

    一.测试单类的初始化顺序

    public class ClassInitOrderTest {
    
      //静态变量
    public static String staticField = "static field";   //静态代码块 static { System.out.println(staticField); System.out.println("static block"); }   //成员变量 private String field = "member field";   //非静态代码块 { System.out.println(field); System.out.println("non-static block"); }   //构造器 public ClassInitOrderTest() { System.out.println("constructor"); } public static void main(String[] args) { new ClassInitOrderTest(); } }

    程序输出结果:

    static field
    static block
    member field
    non-static block
    constructor

    结论:

    静态变量 > 静态初始块 > 成员变量 > 非静态初始块 > 构造器
    

     二.测试继承中类的初始化顺序

    class Parent {
      //父类静态变量
        private static String parentStaticField = "parent static field";
      //父类静态代码块
        static {
            System.out.println(parentStaticField);
            System.out.println("parent static block");
        }
      //成员变量
        private String parentField = "parent member field";
      //非静态代码块
        {
            System.out.println(parentField);
            System.out.println("parent non-static block");
        }
      //父类构造器
        public Parent() {
            System.out.println("parent constructor");
        }
    
    }
    
    public class Child extends Parent {
      //子类静态变量
        private static String childStaticField = "child static field";
      //子类静态代码块
        static {
            System.out.println(childStaticField);
            System.out.println("child static block");
        }
      //子类成员变量
        private String childField = "child member field";
      //子类非静态代码块
        {
            System.out.println(childField);
            System.out.println("child non-static block");
        }
      //子类构造器
        public Child() {
            System.out.println("child constructor");
        }
    
        public static void main(String[] args) {
            new Child();
        }
    
    }

    输出结果:

    parent static field
    parent static block
    child static field
    child static block
    parent member field
    parent non-static block
    parent constructor
    child member field
    child non-static block
    child constructor

    结论:

    父类静态变量 > 父类静态初始块 > 子类静态变量 > 子类静态初始块 > 父类成员变量 > 父类非静态初始块 > 父类构造器 > 子类成员变量 > 子类非静态初始块 > 子类构造器
  • 相关阅读:
    Android 如何自定义EditText 下划线?
    一步一步理解 Java 企业级应用的可扩展性
    客户案例—北京优络时代科技有限公司
    11个显著提升 ASP.NET 应用程序性能的技巧——第1部分
    如何用 React Native 创建一个iOS APP?(二)
    如何与 DevOps 为伍?
    通过 DevOps 整合开发和应用安全管道
    性能为王:选择模拟监控的10大理由!
    模拟监控和真实用户体验监测,选哪个?
    PHP 之 Laravel 框架安装及相关开源软件
  • 原文地址:https://www.cnblogs.com/Harriss/p/10858443.html
Copyright © 2011-2022 走看看