栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【Java基础】子父类构造方法执行顺序

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Java基础】子父类构造方法执行顺序

子父类构造方法执行顺序

案例

package com.cms.继承;



public class Father {

    public Father(){
        System.out.println("这是父类的无参构造方法");
    }

    public Father(String name){
        System.out.println("这位是父类的有参构造方法, name = " + name);
    }
}
package com.cms.继承;



public class Son extends Father{

    public Son(){
        System.out.println("这是子类的无参构造方法");
    }

    public Son(String name){
        System.out.println("这是子类的有参构造方法,name =" + name);
    }
}
package com.cms.继承;



public class Test {
    public static void main(String[] args) {
        Son son = new Son();
        Son son2 = new Son("大头儿子");
    }
}

执行结果:

D:A-MyIstallJava1.8JDK1.8binjava.exe "-javaagent:D:A-MyIstallIntelliJ IDEA 
这是父类的无参构造方法
这是子类的无参构造方法
这是父类的无参构造方法
这是子类的有参构造方法,name =大头儿子
应用场景 - JD
  1. 父类在无参构造方法中调用某个初始化方法;
  2. 那么在实例化子类的时候就会自然而然的调用了父类无参构造方法的这个初始化方法。

Java中子类继承父类,父子类静态代码块、构造代码块以及构造方法的执行次序

public class TestDemo{
 
    public static void main(String[] args){
        Son son = new Son();
    }
 
}
 
class Parent{
 
    {
        System.out.println("父类构造代码块");
    }
 
    static{
        System.out.println("父类静态代码块");
    }
 
    public Parent(){
        System.out.println("父类构造方法");
    }
 
}
 
class Son extends Parent{
 
    {
        System.out.println("子类构造代码块");
    }
 
    static{
        System.out.println("子类静态代码块");
    }
 
    public Son(){
        System.out.println("子类构造方法");
    }
 
}

首先我们来分析一下在JVM中该程序的运行次序:
在我们的JVM中的,当我们运行程序的时候首先是调用main方法,main方法会进入栈中。
此时我们实例化了一个对象【Son son = new Son】
但是在这个程序中,有一个Parent父类,Son是Parent的子类并且继承它。
由于静态代码块是在方法区中进行加载的,所以静态代码块的加载优先级大于对象的创建。所以父类和子类的静态代码块一定是先加载出来的。

其次,由于Java有一个分层话初始化机制,所以Java会先加载父类对象,其次再加载子类对象。
构造代码块的代码执行优先级也是大于构造方法的。所以最终的执行次序为:
父类静态代码块 - 子类静态代码块 - 父类构造代码块 - 父类构造方法 - 子类构造代码块 - 子类构造方法

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/871629.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号