Java的块,静态块,构造函数,继承的执行先后顺序

public class Test 

public static void main(String []agrs) 

Son son = new Son(); 



class Super 

public Super() 

System.out.print("A\t"); 


System.out.print("B\t"); 

static 

System.out.print("C\t"); 



class Son extends Super 

public Son() 

System.out.print("D\t"); 


System.out.print("E\t"); 

static 

System.out.print("F\t"); 







静态的东西是属于类的,非静态的东西是属于实例的。 

静态的先执行,然后才是非静态的。 

在上例中,还要考虑继承的问题。 

首先是父类静态 --> C 

然后是子类静态 --> F 

非静态区块可以看作是构造函数中执行完父类构造函数后的第一部分。(构造函数第一行有一个默认的super()调用,就是调用父类构造函数)。 

这个时候执行父类构造函数: 

父类非静态区块 --> B 

父类构造函数块 --> A 

然后是子类构造函数: 

子类非静态区块 --> E 

子类构造函数块 --> D 

总结一下就是: 

C F B A E D 

值得注意的是,静态的东西只会执行一次,就是在类加载的时候。 

如果我们在上例中修改main函数为: 


Java code 

public static void main(String[] agrs) { Son son = new Son(); Son son2 = new Son();} 



这个时候的执行结果为: 

C F B A E D B A E D 

可以看到第二次创建Son实例的时候,静态的东西不会再次执行。

引用原址:http://d-y-zh.iteye.com/blog/607027

你可能感兴趣的:(Java基础)