初始化顺序-陈远波
在我们每次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("父类构造函数"); } }
输出打印的结果为:
父类静态变量
父类静态块
子类静态变量
子类静态块
父类块
父类变量
父类构造函数
子类块
子类变量
子类构造函数
从而从我打印的语句上就很明显的得出存在继承时的初始化顺序。
以上是我这讲的主要内容,若以上知识点讲解的不够仔细的请各位大神多多包涵和指正,需要学习更多关于软件知识的博友可以关注后续博客