• 一起探索下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(...),那么就会先初始化父类再初始化子类

  • 相关阅读:
    Service
    adb server is out of date
    Notification.Builder
    eclipse连接小米2调试程序的问题
    Date类
    this指向冒泡排序二分查找
    Dom事件键盘事件
    Dom事件键盘事件
    12.4Dom事件键盘事件
    事件对象
  • 原文地址:https://www.cnblogs.com/pig-brother/p/7226213.html
Copyright © 2020-2023  润新知