美文网首页
类的初始化顺序

类的初始化顺序

作者: 行动的侏儒 | 来源:发表于2018-06-09 16:25 被阅读0次
public class InitTest {
    public static void main(String[] args) {
        Shape shape = new Ellipse();
    }
}
class Shape {

    int size = 5;

    Shape() {
        System.out.println(size);//①
        print();//②
    }
    public void print() {
        System.out.println(size);
    }
}
class Ellipse extends Shape{
    int size = 6;
    static {
        System.out.println("I am static method.");//③
    }
    Ellipse() {
        print();//④
    }
    public void print() {
        System.out.println(size);
    }
}
/*
打印结果是:
③:I am static method.
①:5
②:0
④:6
*/
  • 结果分析
    最先打印③的原因是初始化一个对象时,第一步就会调用静态方法和执行静态块。
    ①和④打印5和6说明普通域的初始化在构造方法之前执行。
    ②打印0的原因是print()方法已经被子类重写,但这个时候子类的size还没初始化,说明父类对象的初始化在子类域初始化之前执行。
  • 结论
    初始化一个对象调用构造器的顺序:
    1. 将对象的所有成员变量赋值为0或者Null,JVM会在这个阶段为静态变量赋值和执行静态块。
    2. 对基类的成员变量赋值
    3. 调用基类的构造器(循环1-2步骤,直到基类为Object)。
    4. 按照声明顺序对成员变量进行赋值。
    5. 调用自身构造器。

相关文章

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

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

  • 9道题来理解什么是类的主动引用和被动引用

    剖析类的初始化顺序? 题目: 执行结果: 剖析类的初始化顺序? 先执行父类的方法,再执行子类的

  • 构造器内部的多态方法的行为

    上一篇 :Java类初始化顺序 上一节我们简单总结了类的初始化顺序。父类(静态变量、静态初始化块)>子类(静态变量...

  • [转]Effective C++学习笔记:初始化列表中成员列出的

    类成员的默认初始化顺序是按照声明顺序进行, 如果使用初始化列表初始化成员变量, 则必须按照成员变量的声明顺序进行;...

  • 类初始化和加载过程

    一、对象的初始化顺序: java类加载器加载类的顺序:http://blog.csdn.net/crazycode...

  • Java学习笔记 - 类方法与代码块的执行顺序

    类的初始化顺序 静态初始化块位于类的第一次初始化最前端执行,先父类后子类,是类的初始化块。 初始化块位于每次对象被...

  • java中的继承

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

  • Kotlin记录

    1. kotlin类的调用顺序调用顺序 答:变量初始化 --> init{} --> constractor{} ...

  • 类初始化顺序

    对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序依次是(静态变量、静态初始化块)>(变量、初始...

  • 类初始化顺序

    当类第一次加载到内存中的时候初始化 父类静态成员和静态初始化块,按在代码中出现的顺序依次执行。 子类静态成员和静态...

网友评论

      本文标题:类的初始化顺序

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