类初始化顺序

当类第一次加载到内存中的时候初始化
  1. 父类静态成员和静态初始化块,按在代码中出现的顺序依次执行。
  2. 子类静态成员和静态初始化块,按在代码中出现的顺序依次执行。
  3. 父类的实例成员和实例初始化块,按在代码中出现的顺序依次执行。
  4. 执行父类的构造方法。
  5. 子类实例成员和实例初始化块,按在代码中出现的顺序依次执行。
  6. 执行子类的构造方法。
非静态初始化块和静态初始化块的区别?
  • 非静态初始化块主要用于对象的初始化,每次创建对象都要调用一次,其执行顺序在构造方法之前。
  • 静态初始化块主要用来初始化静态变量,只调用一次,类第一次加载到内存中调用。
  • 非静态成员变量不能在静态方法中使用,同样也不能在静态初始化中初始化
如何验证静态变量和静态初始化块按代码出现顺序
public class TestOrder {
    
    // 静态初始化块
    static {
        System.out.println("静态初始化块");
    }
    
    // 静态变量
    public static TestA a = new TestA();

    // 静态变量
    public static TestB b = new TestB();

    public static void main(String[] args) {
        new TestOrder();
    }
}

class TestA {
    public TestA() {
        System.out.println("Test--A");
    }
}

class TestB {
    public TestB() {
        System.out.println("Test--B");
    }
}

这段代码巧妙运用了类初始化会调用构造方法,让人可以直观的看到变量的初始化过程。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 开始记录之前,我想先上一张图片,这是书本上给出的代码示例,不知道大家的第一感觉是什么,反正我第一次看到这段代码的时...
    怡红快绿阅读 292评论 0 0
  • 1.静态代码块,静态变量,按代码顺序先后执行.2.构造代码块,成员变量,按代码顺序先后执行.3.先执行构造块或成员...
    听说我很强阅读 411评论 0 0
  • 前言 做Java开发将近一年半了,虽然之前系统地学习过Java,但是实践出真知,最近总感觉还有好多知识点没有掌握,...
    pro090701阅读 255评论 0 0
  • 这是一个荒诞的故事。 这是一张张唯美的壁纸。 这是一首首摇滚乐。 这是一个只有相信奇迹才能发生奇迹的时空。
    曦曦李的美丽传说阅读 255评论 0 0
  • 深圳,阴天。觉得今天过得很艰难呀,推行的春节行政方案不是很顺利。一个是春节大家都回家了,不愿意把东西搬来搬去;二是...
    Echo可可阅读 164评论 0 0