美文网首页工作生活
类的实例化顺序

类的实例化顺序

作者: QuickLearn | 来源:发表于2019-07-02 13:05 被阅读0次

最近想研究下spring源码,发现类的实例化顺序都忘光了还研究个毛线。因此写了个简单的Demo记录下。
大概的思路是,子类继承父类,当new一个子类时,会先实例化父类,然后实例化子类。看起来就像子类包裹着父类,子类有父类全部的“基因”,同时又有自己的特点。
父类Father:

public class Father {

    private static final int f1 = 1;

    private int f2 = 2;

    static {
        System.out.println("this is father's static block");
    }

    public Father() {
        System.out.println("father's  default constructor");
    }

    public Father(int i) {
        System.out.println("father's constructor with  param");
    }
}

子类Son 继承Father


public class Son extends  Father {

    private static final int s1 = 1;

    private int s2 = 2;

    static {
        System.out.println("this is son's static block");
    }


    public Son() {
        System.out.println("son's default constructor");
    }

    public Son(int i) {
        super(i);
        System.out.println("son's constructor with param");
    }

    public static void main(String[] args) {
        new Son(1);
    }
}

首先要分清类的加载和实例化。
类的加载:相当于把class(也就是制造对象的模板)加载到JVM中。可以这样理解,一些静态不变的东西(static代码块,static变量)是归属于class的,因此类的加载阶段执行一次就好了。当我们new一个Son时,会触发类的加载(就是把Father,son这两个类加载到JVM)。此时会执行静态代码块。输出如下:


this is father's static block
this is son's static block

类的实例化:然后真正开始“制作”Son的实例:


father's constructor with  param
son's constructor with param


可以看到首先执行父类构造方法,然后子类构造方法。通过debug可以看到在执行构造方法之前会先给类的成员变量赋值。总之,先构造好父类,然后在父类基础上构造子类。

简单的记录下,具体的细节到需要的时候再补充。

相关文章

  • 类的实例化顺序

    先静态 就是先父后子先加载父类的全部 后面再加载子类优先级:父类>子类 。

  • 类的实例化顺序

    最近想研究下spring源码,发现类的实例化顺序都忘光了还研究个毛线。因此写了个简单的Demo记录下。大概的思路是...

  • Java 构造方法中的多态

    类的实例化顺序是先实例化父类在实例化子类,也就是先调用父类的构造方法,再调用子类的构造方法,如果在构造方法中调用其...

  • Java初始化顺序

    Java初始化顺序:①类变量、类方法>②(父类代码)>③实例变量>④构造器当一个类要实例化时,static变量和方...

  • Java的类的实例化顺序

    作者:nnngu GitHub:https://github.com/nnngu 博客园:http://www...

  • 阿里P7发布18道jvm面试题,来看一下你是不是真的明白jvm

    1. 类的实例化顺序,比如父类静态数据,构造函数,字段,子类静态数据,构造函数,字段,他们的执行顺序 答:先静态、...

  • java基础知识梳理04-实例化顺序

    类的实例化顺序:父类静态代理块--->子类静态代码块--->父类代码块--->父类构造函数-->子类代码块-->子...

  • 由浅入深详解Java 类的实例化顺序

    一、构造方法与代码块的先后顺序 为了验证Java 中类的实例化顺序,我们需要有三个类:父类、子类、测试类。三者的定...

  • C#继承与构造函数的调用

    1、实例化父类时,可以使用new子类,执行构造函数顺序为:先执行父类构造函数,再执行子类构造函数。 2、实例化子类...

  • 类加载、变量、i++、单例模式

    一、类的加载顺序 静态先行>构造块>构造方法 1、类初始化和实例化对象过程 如上来看,main方法在son中,启动...

网友评论

    本文标题:类的实例化顺序

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