文章目录
什么是子类对象初始化
对于一个普通类,JVM通过类加载了解它,从而能够完成创建该类对象,或一些其他操作。在有了继承的概念后,在继承中,子类会继承父类的成员,使用子类对象可以直接访问从父类中继承过来的成员,在创建子类对象时这些父类的成员变量也需要赋值,那么这些成员变量如何出现、如何赋值等等就是我们要研究的子类对象初始化的问题。
创建子类对象的类加载情况
创建子类对象,会触发父类的类加载,而且类加载的顺序是“先父后子”,先完成父类的类加载,再开始子类的类加载。
触发子类类加载,会优先类加载父类,而且从顶层父类开始,向下完成类加载。
JDK源码中的类也是需要类加载的,实际上源码中的类,例如String、Object这种,在启动JVM的时候,就已经类加载了,轮不到启动main方法去类加载它。
当前学习到的四种类加载时机:
- new对象
- 启动main方法
- 访问静态成员
- 触发子类类加载,优先类加载父类
创建子类对象时的情况
会创建几个对象
new关键字创建子类对象,只会在堆上创建一个子类对象,不会创建父类对象。在使用new关键字创建对象时,写的是创建什么对象,就只会创建这个类的对象,而不会创建它的父类对象。