初始化顺序-陈远波

在我们每次new一个对象的时候,对象都会被初始化,但是他们初始化的顺序又是怎样呢?现在我以存在继承与不存在继承的代码给大家演示。

一、对于没有继承的初始化的顺序(静态变量,静态块、构造函数、变量)

package test;
//没有继承情况下的代码
public class test5 {
    //静态变量
    private static String st="静态变量";
    //静态块
    static{
        System.out.println(st);
        System.out.println("静态块");
    }
    //
    {
        System.out.println("块");
    }
    //常量
    private String st2="变量";
    //构造函数
    test5(){
        System.out.println(st2);
        System.out.println("构造函数");
    }
    public static void main(String[] args) {
        new test5();
    }    
}

该代码的输出结果为:

静态变量
静态块

变量
构造函数

由此可得出没有继承下的初始化顺序。

二、当存在继承的时候的初始化如下:

package test;
//子类代码
public class test6 extends test5 {
    //静态变量
    private static String st="子类静态变量";
    //静态块
    static{
        System.out.println(st);
        System.out.println("子类静态块");
    }
    //
    {
        System.out.println("子类块");
    }
    //常量
    private String st2="子类变量";
    //构造函数
    test6(){
        System.out.println(st2);
        System.out.println("子类构造函数");
    }
    public static void main(String[] args) {
        new test6();
    }    
    
}
//父类代码
package test;
//没有继承情况下的代码
public class test5 {
    //静态变量
    private static String st="父类静态变量";
    //静态块
    static{
        System.out.println(st);
        System.out.println("父类静态块");
    }
    //
    {
        System.out.println("父类块");
    }
    //常量
    private String st2="父类变量";
    //构造函数
    test5(){
        System.out.println(st2);
        System.out.println("父类构造函数");
    }
}

输出打印的结果为:

父类静态变量
父类静态块
子类静态变量
子类静态块
父类块
父类变量
父类构造函数
子类块
子类变量
子类构造函数

  从而从我打印的语句上就很明显的得出存在继承时的初始化顺序。

  以上是我这讲的主要内容,若以上知识点讲解的不够仔细的请各位大神多多包涵和指正,需要学习更多关于软件知识的博友可以关注后续博客

原文地址:https://www.cnblogs.com/chenyuanbo/p/7471110.html