zoukankan      html  css  js  c++  java
  • Java对象的初始化顺序,原理版,不用死记

    看了好多对Java初始化顺序的解释,都是给出验证案例。其实我还是比较喜欢根据原理理解记忆,结合前段时间学习的JVM,给出了基于自己理解的解释,如有不对,欢迎指出。

    1.同一个类中,先执行 clinit ,再执行init

    clinit : 静态属性的初始化:初始化顺序是根据静态成员的定义从上往下初始化。

    init:构造器和非静态变量初始化:初始化顺序是 非静态成员从上往下,最后构造器

    2.存在继承关系中,先执行父类clinit,再执行子类clinit,后执行父类init 再执行子类init

    附,验证代码:

    public static void main(String[] args) {
            B b = new B();
        }
    }
    
    class C {
        {
            System.out.println("C ! static block");
        }
        private  A test = new A("C mem");
    
        static {
            System.out.println("C static block");
        }
        public static A a = new A("C static mem");
        C(){
            System.out.println("C Construct");
        }
    }
    class  B extends  C{
        {
            System.out.println("B ! static block");
        }
        private  A test = new A("B !static mem");
    
        static {
            System.out.println("B static block");
        }
        public static A a = new A("B static men");
        B(){
            System.out.println("B Construct");
        }
    }
    class A {
       A(String str){
           System.out.println(str);
       }
    }

    关于我对main方法与静态成员的执行的理解,请移步 :Java中的main方法

  • 相关阅读:
    布局
    JS基础回顾_滚动条
    JS基础回顾_Dom
    JS语法_其他
    JS语法_类型
    一些免费的API
    CSS特效(一)
    博客园在Markdown中使用JS
    C# 聊一聊屏保的设置 第一步 注册表
    2019 力扣杯-全国高校春季编程大赛 最长重复子串
  • 原文地址:https://www.cnblogs.com/yzw-daemon/p/13273080.html
Copyright © 2011-2022 走看看