美文网首页Java语言基础
对象的初始化顺序

对象的初始化顺序

作者: SHAN某人 | 来源:发表于2017-12-16 10:58 被阅读10次

分析代码来源:胖胖-对象初始化顺序

 /**
     *    控制台打印
     */
    class Log{
        public static String baseFieldInit(){System.out.println("父类非静态变量");return "";}

        public static String baseStaticFieldInit(){System.out.println("父类静态变量");return "";}

        public static String fieldInit(){System.out.println("子类非静态变量");return "";}

        public static String staticFieldInit(){System.out.println("子类静态变量");return "";}
    }
    /**
     *  基类
     */
    class Base {
        /*1*/ private static String staticValue=Log.baseStaticFieldInit();

        /*1*/ static {System.out.println("父类静态代码块");}

        /*1*/ static {System.out.println("父类静态代码块2");}

        /*3*/ {System.out.println("父类非静态代码块1");}

        /*3*/ private String value=Log.baseFieldInit();

        /*3*/ {System.out.println("父类非静态代码块2");}

        /*4*/ Base(){System.out.println("父类构造方法");}
    }
/**
 *  派生类
 */
public class Derived extends Base{

    /*2*/ static {System.out.println("子类静态代码块1");}

    /*2*/ private static String staticValue=Log.staticFieldInit();

    /*2*/ static {System.out.println("子类静态代码块2");}

    /*5*/ {System.out.println("子类非静态代码块1");}

    /*5*/ private String value=Log.fieldInit();

    /*5*/ {System.out.println("子类非静态代码块2");}

    /*6*/ Derived(){System.out.println("子类构造方法");}

    /**
     *  MAIN 主线程
     */
    public static void main(String[] args){
        Derived d=new Derived();
    }

}
执行结果

结论:

一个误解

首先指出初始化顺序不一定严格按照以上顺序进行,如果静态代码块写在静态变量之前,则先执行静态代码块。

总之,规律是执行的顺序严格按照先静态再非静态再构造方法,先父类后子类的顺序进行。

父类静态(变量或代码块,编写顺序为执行顺序)-->子类静态-->父类非静态-->父类构造-->子类非静态-->子类构造

相关文章

  • C++对象模型5——对象的构造/析构

    对象的构造/析构顺序 初始化虚基类,按照继承顺序,从左到右,从最深到最浅。 初始化按照继承顺序初始化父类,如果父类...

  • 14.对象的初始化顺序

    对象初始化顺序 1、初始化属性 2、调用构造方法 结果:

  • 初始化

    成员方法的初始化 在类的内部,变量的定义顺序决定了初始化的顺序。创建一个对象时,会先初始化对象中的成员变量,然后才...

  • 对象的初始化顺序

    分析代码来源:胖胖-对象初始化顺序 结论: 首先指出初始化顺序不一定严格按照以上顺序进行,如果静态代码块写在静态变...

  • 方法调用顺序

    方法调用顺序 1.alloc :创建对象,分配空间 2.init :初始化对象,初始化数据 3.loadView...

  • 类初始化和加载过程

    一、对象的初始化顺序: java类加载器加载类的顺序:http://blog.csdn.net/crazycode...

  • [Java]对象初始化顺序

    父类: 子类: 运行结果: 结论: 1. 静态初始化块 2. 初始化块和构造函数 注意在父类构造函数或初始化块时的...

  • 对象初始化调用顺序

    执行public class B extends A(需要有main方法)的时候会先调用B的父类A中的静态部分(静...

  • Java对象初始化顺序

  • java中的继承

    继承的关键之是extends子类 extends 父类 继承的初始化顺序 初始化父类再初始化子类 先执行初始化对象...

网友评论

    本文标题:对象的初始化顺序

    本文链接:https://www.haomeiwen.com/subject/kohswxtx.html