JAVA 继承初始化

这篇博客探讨了Java中类加载的过程和对象初始化的顺序。首先,基础类的静态初始化按照静态变量声明的顺序执行,然后是派生类的静态初始化。接着,对象创建时,基础类的构造器被自动调用,初始化其实例变量,随后是派生类的实例变量初始化和构造器主体。整个过程遵循严格的顺序,确保依赖关系得到正确处理。
摘要由CSDN通过智能技术生成
class Insect{
    int i=9;
    int j;
    Insect(){
        prt("i="+i+", j="+j);
        j=39;
    }
    static int x1=
            prt("static Insect.x1 initialized");
    static int prt(String s){
        System.out.println(s);
        return 47;
    }
}
public class Beetle extends Insect{
    int k =prt("Beetle.k initilized");
    Beetle(){
        prt("k="+k);
        prt("j="+j);
    }
    static int x2=
            prt("static Beetle.x2 initialized");
    static int prt(String s){
        System.out.println(s);
        return 63;
    }
    public static void main(String[] args){
        prt("Beetle constructor");
        Beetle b= new Beetle();
    }
}

对Beetle运行Java的时候,发生的第一件事情就是装载程序到外面去找那个类,就是找到Insect这个类,在装载的过程中,装载程序会首先根据关键词EXTENDS,将要继承的类载入进来,无论是否准备生成那个基础的类的一个对象,这个过程都是会发生的。
这是一个递归的过程,假如我们需要继承的类,也继承了一个类那么同样的也会导入,接下来会在根基础类首先执行static的初始化,static的意义就是强调这个对象只有一个。之后再在下一个衍生类执行static的初始化过程,以此类推。保证这个顺序是十分关键的,因为衍圣雷的初始化要依赖与对基础类成员的正确初始化,这也是一个连锁反应。
此时,必要的类已经初始化完毕后,能够创建对象了。首先,这个对象中的所有基本数据类型都会设定成他们的默认值,而将对象句柄设置成Null。随后会调用基础类的构建器。在这个情况下,调用是自动进行的。但也可以使用super来自行指定构建器调用。这个处理过程所有的类都是一样的,基础构建器构建完成之后,实例变量会按本来的顺序得以初始化。最后执行构建器剩余的主体部分。
运行结果:顺序很重要

static Insect.x1 initialized
static Beetle.x2 initialized
Beetle constructor
i=9, j=0
Beetle.k initilized
k=63
j=39
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值