AJPFX关于面向对象中的对象初始化整理,综合子父类、代码块等等

今天总结了一下子父类当中含有静态代码块、代码块、构造函数、成员变量、子类复写父类方法时子类的初始化过程,把思路理清一下

class Fu
{
//父类成员变量
private int num = 3;

    //静态代码块,随着类的加载而加载
    static{
            System.out.println("父类静态代码块");
    }
    
    //代码块,运行于构造函数之前,成员变量显示初始化之后
    {
            System.out.println("父类代码块,num = "+num);
    }
    
    //构造函数,先去找他爸爸,运行完父类再运行子类
    Fu(){
            super();//此处去找Object,可忽略
            System.out.println("父类构造函数,num = "+num);
            
            //此处调用的是子类的show方法,因为被覆盖了,注意子类覆盖父类方法时,返回值也得一样
            show();
    }
    
    public void show()
    {
            System.out.println("父类show方法,num = "+num);
    }

}
class Demo extends Fu
{
private int age =23;

    //静态代码块,他有直接父类时,先去加载直接父类
    static{
            System.out.println("子类静态代码块");
    }
    
    //构造代码块,当有直接父类时,当父类运行完毕才轮到构造代码块
    {
            System.out.println("子类代码块,age = "+age);
    }
    
    Demo()
    {
            System.out.println("子类构造函数,age = "+age);
            show();
            
    }
    public void show()
    {
            System.out.println("子类show方法,age = "+age);
            
    }
    
    
    public static void main(String[] args)throws IOException
    {
            new Demo();
    }
    
    
    /*
     *         父类静态代码块
            子类静态代码块
            父类代码块,num = 3
            父类构造函数,num = 3
            子类show方法,age = 0
            子类代码块,age = 23
            子类构造函数,age = 23
            子类show方法,age = 23
     * */

}
总结一下:
1.父类字节码先被JVM加载,父类静态代码块先运行。
2.子类字节码被加载,子类静态代码块运行。
3.子类构造函数进栈,子类的成员变量默认初始化
4.super启动,父类构造函数进栈,父类成员变量默认初始化(super–>Object,可忽略)
5.父类成员变量显示初始化
6.父类构造代码块加载
7.父类构造函数运行。
8.子类成员变量显示初始化
9.子类构造代码块运行。
10.子类构造函数运行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值