Java 类的初始化顺序 附测试代码

来源:互联网 发布:cf踢腿外设软件 编辑:程序博客网 时间:2024/05/16 05:35

类的初始化顺序有点忘了,于是写个个小Demo来测试一下,从输出的结果来看,大概按照如下顺序

1 父类的静态部分(第一次加载的话),这包括静态域,静态初始化字句

2 子类的静态部分(第一次加载的话),这包括静态域,静态初始化字句

3 父类的非静态部分,包括非静态实例,实例初始化字句

4 父类的构造器

5 子类的非静态部分,包括非静态实例,实例初始化字句

6 子类的构造器

00 同一个次序中,不同部分按照声明的顺序初始化


测试代码如下

class Out{Out(String s){System.out.println(s);}}class Super{  Out a = new Out("super instance field 1");static Out b = new Out("super static field 1");public Super(){  System.out.println("super constructor");} {System.out.println("super instance initialization");}    static{          System.out.println("super static initialization");    }      Out c = new Out("super instance field 2");static Out d = new Out("super static field 2");}  class Sub extends Super{Out a = new Out("sub instance field 1");static Out b = new Out("sub static field 1");public Sub(){  System.out.println("sub constructor");} {System.out.println("sub instance initialization");}    static{          System.out.println("sub static initialization");    }      Out c = new Out("sub instance field 2");static Out d = new Out("sub static field 2");}  public class Test{      public static void main(String[] args){      Super a = new Sub();    }  } 

结果如下

super static field 1
super static initialization
super static field 2
sub static field 1
sub static initialization
sub static field 2
super instance field 1
super instance initialization
super instance field 2
super constructor
sub instance field 1
sub instance initialization
sub instance field 2
sub constructor


0 0