在Java中,当创建子类对象时,构造函数的调用顺序遵循以下规则:
- 父类的静态变量和静态初始化块:首先,Java会加载父类,并执行父类中的静态变量初始化和静态初始化块(静态代码块)。这只会在类首次被加载到JVM时执行一次。
- 子类的静态变量和静态初始化块:接下来,Java会加载子类,并执行子类中的静态变量初始化和静态初始化块。
- 父类的实例变量和实例初始化块:当创建子类对象时,Java会首先调用父类的构造函数。在父类构造函数执行之前,父类的实例变量会被初始化(如果有显式初始化),然后执行父类的实例初始化块(如果有)。
- 父类的构造函数:之后,父类的构造函数会被执行。
- 子类的实例变量和实例初始化块:在父类构造函数执行完毕后,子类的实例变量会被初始化(如果有显式初始化),然后执行子类的实例初始化块(如果有)。
- 子类的构造函数:最后,子类的构造函数会被执行。
这个过程确保了父类在子类之前被完全初始化,这样子类就可以安全地访问父类的任何非静态成员。
以下是一个简单的例子来展示这个过程:
class Parent {
static {
System.out.println("Parent static block");
}
{
System.out.println("Parent instance block");
}
public Parent() {
System.out.println("Parent constructor");
}
}
class Child extends Parent {
static {
System.out.println("Child static block");
}
{
System.out.println("Child instance block");
}
public Child() {
System.out.println("Child constructor");
}
}
public class Main {
public static void main(String[] args) {
new Child();
}
}
输出结果为:文章来源:https://www.toymoban.com/news/detail-846359.html
Parent static block
Child static block
Parent instance block
Parent constructor
Child instance block
Child constructor
这个输出清楚地展示了构造函数在继承中的调用顺序。文章来源地址https://www.toymoban.com/news/detail-846359.html
到了这里,关于java中构造函数在继承中的调用顺序是什么?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!