类加载和实例化顺序

来源:互联网 发布:手机淘宝店铺装修 编辑:程序博客网 时间:2024/06/06 07:10

类实例化, 先成员变量默认初始化, 成员变量显式初始化, 执行构造函数

有父子关系的类实例化, 成员变量默认初始化, 执行父类构造函数, 成员变量显式初始化, 执行子类构造函数

class Fu{    Fu()    {        super();        show();  //通过结果可以看出,子父类有同名show方法,调用的是子类show方法。        return;    }    void show()    {        System.out.println("fu show");    }}class Zi extends Fu{    int num = 8;    Zi()    {        super();        //-->通过super初始化父类内容时,子类的成员变量并未显示初始化。等super()父类初始化完毕后,        //才进行子类的成员变量显示初始化。        System.out.println("zi cons run...."+num);        return;    }    void show()     {        System.out.println("zi show..."+num);    }}class ExtendsDemo5 {    public static void main(String[] args)     {        Zi z = new Zi();         z.show();    }}

输出:

zi show...0
zi cons run....8
zi show...8


类的加载和实例化顺序

1) 在堆内存中生成class对象, 把静态变量和静态方法加载到方法区, 这个堆内存中的class对象是方法区数据的入口

2) 静态变量默认初始化

3) 静态变量显式初始化

4) 执行静态代码块

5) 成员变量默认初始化, 显示初始化

6) 执行构造函数