美文网首页
继承与初始化顺序问题

继承与初始化顺序问题

作者: Hope_加贝 | 来源:发表于2019-08-29 14:25 被阅读0次
import static net.mindview.util.Print.*;
class Insert{
    private int i = printInit(" Insert.i initialized");;
    protected int j;
    Insert(){
        print("i = "+i+", j ="+j);
        j = 39;
    }
    private static int x1 = printInit("Static Insert.x1 initialized");
    static int printInit(String s){
        print(s);
        return 47;
    }
}

public class  Beetle extends Insert{
    private int k = printInit("Beetle.k initialized");
    public Beetle(){
        print("k = "+k);
        print("j="+j);
    }
    private int h = printInit("Beetle.h initialized");
    private static int x2 = printInit("Static Beetle.x2 initialized");
    public static void main(String[] args){
        print("Beetle constructor");
        Beetle b = new Beetle();
        
    }
    
}

在Beetle上运行Java时,第一件事就是试图访问Beetle.main()(一个static方法),于是加载器开始启动并找出Beetle类的编译代码(在名为Beetle.calss的文件之中),对它进行加载的过程中,编译器注意到它有一个基类
于是它继续进行加载,不管你是否打算产生一个该基类的对象,这都要发生。
如果该基类还有自身的基类,那么仍会递归加载,根基类中的static初始化即会被执行,然后是下一个导出类,因为导出类的static初始化可能会依赖于基类成员能否被正确初始化。

至此,必要的类已加载完毕,对象就可以被创建了,首先,对象中的所有基本类型都会被设为默认值,对象引用被设为null,然后基类的构造器会被调用。
输出结果:

Static Insert.x1 initialized
Static Beetle.x2 initialized
Beetle constructor
 Insert.i initialized
i = 47, j =0
Beetle.k initialized
Beetle.h initialized
k = 47

相关文章

  • 继承与初始化顺序问题

    在Beetle上运行Java时,第一件事就是试图访问Beetle.main()(一个static方法),于是加载器...

  • java类初始化机制

    初始化顺序 无继承类初始化 初始化顺序静态变量/静态代码块 -> 成员变量/代码块 -> 构造函数其中,静态变量与...

  • C++对象模型5——对象的构造/析构

    对象的构造/析构顺序 初始化虚基类,按照继承顺序,从左到右,从最深到最浅。 初始化按照继承顺序初始化父类,如果父类...

  • Java 继承(1)

    Java中只允许单继承 2.继承关键字:extends 3.继承初始化顺序:(1)初始化父类再初始化子类(2)先执...

  • java中的继承

    继承的关键之是extends子类 extends 父类 继承的初始化顺序 初始化父类再初始化子类 先执行初始化对象...

  • java继承中初始化顺序问题

    继承,是扩展父类的作用范围,子类不仅拥有父类现有的功能,还能扩展出一些特别的功能以下分别在父类和子类中定义了 无参...

  • java初始化顺序

    存在继承关系时 父类static块和静态成员变量,按顺序初始化 子类static块和静态成员变量,按顺序初始化 父...

  • Java中的继承

    继承初始化顺序 1、初始化父类再初始化子类2、先执行初始化对象中属性,再执行构造方法中的初始化 重写 1、什么是方...

  • scala-继承与特质

    继承与特质 继承 继承的概念 使用extends关键字: 构造器的执行顺序 Scala在继承的时候构造器的执行顺序...

  • Java类的初始化顺序

    本文主要演示Java类的初始化顺序,分为有继承和没有继承两种情况。如有错误,劳烦指正,不胜感谢! 没有继承情况 直...

网友评论

      本文标题:继承与初始化顺序问题

      本文链接:https://www.haomeiwen.com/subject/ilsiectx.html