首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

java静态属性/静态代码块、非静态属性/非静态代码块、构造方法及子父类的实施顺序

2012-11-01 
java静态属性/静态代码块、非静态属性/非静态代码块、构造方法及子父类的执行顺序?请看下面小demo,这里有两

java静态属性/静态代码块、非静态属性/非静态代码块、构造方法及子父类的执行顺序

?请看下面小demo,这里有两个类SubClass和SupperClass,其中SubClass继承于SupperClass。

?

SupperClass类:

/**
?* 父类
?*
?* @author yangbl
?*
?*/
public class SupperClass {

??? static String staticVariable = "supper staticVariable initialize";

??? static {
??? ??? staticVariable = "supper static block execute";
??? ??? System.out.println(staticVariable);
??? }

??? {
??? ??? staticVariable = "supper block execute";
??? ??? System.out.println(staticVariable);
??? }

??? public SupperClass() {
??? ??? staticVariable = "supper constructor execute";
??? ??? System.out.println(staticVariable);
??? }

}

?

SubClass类:

/**
?* 子类
?*
?* @author yangbl
?*
?*/
public class SubClass extends SupperClass {

??? static {
??? ??? staticVariable = "subClass static block execute";
??? ??? System.out.println(staticVariable);
??? }

??? {
??? ??? staticVariable = "subClass block execute";
??? ??? System.out.println(staticVariable);
??? }

??? public SubClass() {
??? ??? staticVariable = "subClass constructor execute";
??? ??? System.out.println(staticVariable);
??? }

??? public static void main(String[] args) {
??? ??? SupperClass supperClass = new SubClass();
??? }
}

?

运行SubClass类中的main方法得到结果如下:

supper static block execute
subClass static block execute
supper block execute
supper constructor execute
subClass block execute
subClass constructor execute

?

分析结果可以得到如下加载执行顺序结论:

1.加载父类的静态属性和静态代码块。

2.加载子类的静态属性和静态代码块。

3.加载父类的非静态属性和非静态代码块。

4.加载父类的构造方法。

5.加载子类的非静态属性和非静态代码块。

6.加载子类的构造方法。

?

注:

1.静态属性和静态代码块是在类加载的时候就加载执行,执行顺序与代码顺序相同。

2.非静态属性和非静态代码块是在类创建实例的时候执行,优先于构造方法,执行顺序与代码顺序相同。

热点排行