您的位置:首页 > 编程语言 > Java开发

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

2017-03-22 15:50 274 查看
类的初始化顺序有点忘了,于是写个个小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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 初始化顺序