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
    原创不易,本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    bash帮助文档简单学习;bash手册翻译
    jmeter的master、slave模型启动方法
    如何查看pip安装包的所有版本;以及ipython的安装
    简单过下bash/sh脚本基本知识吧
    Celery 启动报错 can_read() got an unexpected keyword argument timeout
    paramiko执行命令超时的问题
    远程的jmeter自动执行完,如何回调通知被调用者“结束”状态
    记录一下:关于mysql数据误删除恢复的问题
    数据库Sharding的基本思想和切分策略
    数据库分库分表(sharding)系列(一) 拆分实施策略和示例演示
  • 原文地址:https://www.cnblogs.com/ninth/p/6251589.html
Copyright © 2011-2022 走看看