类加载和实例化顺序

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

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

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) 执行构造函数

posted @ 2017-08-09 11:18  車輪の唄  阅读(14)  评论(0)    收藏  举报  来源