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

    一、概述

    了解类的初始化顺序,可以更灵活、方便的构造一个类。

    二、类初始化顺序

    2.1 示例

    public class InitialOrderTest {
    
        public static void main(String[] args) {
            new InitialOrderTest();
        }
    
        // 变量
        public FieldClass field = new FieldClass("变量");
    
        // 初始化块
        {
            System.out.println("初始化块");
        }
    
        // 静态变量
        public static FieldClass staticField = new FieldClass("静态变量");
    
        // 静态初始化块
        static {
            System.out.println("静态初始化块");
        }
    
        // 构造器
        public InitialOrderTest() {
            System.out.println("构造器");
        }
    }
    
    public class FieldClass {
        public FieldClass(String msg){
            System.out.println(msg);
        }
    }
    
    

    2.2 结论

    2.1 示例运印结果:

    1.静态变量
    2.静态初始化块
    3.变量
    4.初始化块
    5.构造器
    

    三、继承关系初始化顺序

    3.1 示例

    public class Parent {
        
        public Parent(){
            System.out.println("父类构造器");
        }
    
        //静态初始块
        static{
            System.out.println("父类静态初始化");
        }
    
        //静态变量
        public static FieldClass parentStaticField=new FieldClass("父类静态变量");
    
        //初始化块
        {
            System.out.println("父类初始化块");
        }
    
        //变量
        public FieldClass parentField=new FieldClass("父类变量");
    }
    
    
    public class Child extends Parent{
    
        public Child(){
            System.out.println("子类构造器");
        }
    
        //静态初始块
        static{
            System.out.println("子类静态初始化");
        }
    
        //静态变量
        public static FieldClass childStaticField=new FieldClass("子类静态变量");
    
        //初始化块
        {
            System.out.println("子类初始化块");
        }
    
        //变量
        public FieldClass childField=new FieldClass("子类变量");
    
        public static void main(String[] args){
            new Child();
        }
    }
    
    
    public class FieldClass {
        public FieldClass(String msg){
            System.out.println(msg);
        }
    }
    

    3.2 结论

    3.1 示例打印结果:

    1. 父类静态初始化
    2. 父类静态变量
    3. 子类静态初始化
    4. 子类静态变量
    5. 父类初始化块
    6. 父类变量
    7. 父类构造器
    8. 子类初始化块
    9. 子类变量
    10. 子类构造器
    

    四、静态变量与静态初始化块、变量与初始化块的顺序

    仔细观察以上两个示例,会发现关于静态变量与静态初始化块、变量与初始化块的结果打印顺序是不同的,所以最终的结论:静态变量和静态初始化块、变量和初始化块的初始化顺序取决于在类中定义的顺序

      注:文章中难免有不足之处,欢迎评论、互动、指正。

    作者: i-nine
    原创不易,本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    失败的项目,反思
    没人教的项目管理方法之(明白该干什么) 二、项目章程如何写(下)
    没人教的项目管理方法之(明白该干什么) 二、项目章程如何写(上)
    转载:WireShark 过滤语法
    转载:各个Linux版本的本地root密码破解方法
    w7升级旗舰版
    xmarks hosts
    Server、Workstation、Secondary Logon服务无法自启动
    windows2003,xp,RHEL 5 序列号/SN
    项目管理解决方案
  • 原文地址:https://www.cnblogs.com/ninth/p/6251589.html
Copyright © 2011-2022 走看看