码迷,mamicode.com
首页 > 编程语言 > 详细

java 类属性的加载顺序(带有继承关系的)

时间:2016-11-10 02:55:46      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:lap   closed   ges   ini   and   静态   image   display   java   

工作有三年之久了,突然感觉带有继承关系、父子俩既有静态变量又有成员变量的情况,变量的加载顺序很容易混淆,今晚写了个例子,总算是把关系搞清楚了

例子中,父类既有普遍的成员变量,也有static变量,也有static代码块,在父类的构造器前后都有static变量及普通变量,让我们看看初始化子类的时候会发生什么吧

先提供完整代码:

LoadSequence.java

技术分享
public class LoadSequence {
    public static void main(String[] args) {
        new LsSon();
        
    }
}

class PrintObj {
    public PrintObj(String str) {
        System.out.println(str);
    }
}

class LsFather {
    static PrintObj po1 = new PrintObj("LsFather static new 1 ");

    PrintObj po2 = new PrintObj("LsFather new 2 ");
    
    static {
        System.out.println("LsFather static");
    }

    public LsFather() {
        System.out.println("LsFather()");
    }
}

class LsSon extends LsFather {
    static PrintObj po3 = new PrintObj("LsSon static new 3 ");

    PrintObj po4 = new PrintObj("LsSon new 4 ");

    static {
        System.out.println("LsSon static");
    }

    public LsSon() {
        System.out.println("LsSon()");
    }
    
    static PrintObj po5 = new PrintObj("LsSon static new 6 ");
    
    PrintObj po6 = new PrintObj("LsSon new 6 ");

}
View Code

 

执行结果如下:

LsFather static new 1
LsFather static
LsSon static new 3
LsSon static
LsSon static new 6
LsFather new 2
LsFather()
LsSon new 4
LsSon new 6
LsSon()

由于可知:

带有继承关系的,实例化子类时,加载顺序如下:

父类static标识的代码,按顺序自上而下全部执行  ->  子类static标识的代码,按顺序自上而下全部执行

->父类成员变量加载 -> 父类构造函数 -> 子类成员变量加载 -> 子类构造函数

java 类属性的加载顺序(带有继承关系的)

标签:lap   closed   ges   ini   and   静态   image   display   java   

原文地址:http://www.cnblogs.com/goldeneast/p/6049414.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!