• 一起探索下java的类初始化顺序


    一个java类里面有代码块、变量、构造方法,而代码块和变量都有静态和非静态,它们的初始化顺序又是怎样的呢,是否跟编写的先后顺序有关?

    1⃣️先上代码

    public class InitTest {
        
        private int a=a();
        
        private static int b=b();
        
        {
            System.out.println("初始化非静态代码块");
        }
        
        static {
            System.out.println("初始化静态代码块");
        }
        
        public InitTest(){
            super();
            System.out.println("初始化构造方法");
        }
        
        private int a(){
            System.out.println("初始化非静态变量");
            return 0;
        }
        
        private static int b(){
            System.out.println("初始化静态变量");
            return 0;
        }
        
    }

    执行结果:

    初步分析是先初始化静态的,在初始化非静态,最后才是构造方法。

    最后我们分析一下,如果都是静态或者都是非静态,究竟是先初始化代码块先还是变量先。

    ok,还是先上代码,这里我只演示都是静态的

    public class InitTest {
        
        private static int a=a();
        static {
            System.out.println("初始化静态代码块");
        }
    
        private static int b=b();
        
        private static int a(){
            System.out.println("初始化静态变量a");
            return 0;
        }
        
        private static int b(){
            System.out.println("初始化静态变量b");
            return 0;
        }
        
    }

    执行结果

    由这里可以看到,同时静态,初始化顺序是由编译是代码从上到下

    了解一个类的初始化顺序在开发中是非常非常重要的 

    补充一下,如果有父类并且子类有调用super(...),那么就会先初始化父类再初始化子类

  • 相关阅读:
    MySQL · 引擎特性 · InnoDB 事务锁简介
    锁大全与 GDB调试
    docker(4):coreos+docker+rancher真厉害
    TIDB ---NEW SQL
    Linux的内存回收和交换
    TLS握手优化详解
    北风网JAVA 大数据培训
    MySQL 5.7 深度解析: JSON数据类型使用
    MySQL 5.7 深度解析: 临时表空间
    在Linux最大打开文件数限制下 MySQL 对参数的调整
  • 原文地址:https://www.cnblogs.com/pig-brother/p/7226213.html
Copyright © 2020-2023  润新知