欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

类的初始化

程序员文章站 2024-01-01 10:29:04
...

类的初始化过程

  1. 类加载:当首次创建类对象时(构造器也是静态方法)或者类的静态方法/静态字段首次被访问时,java解释器通过载入class文件,创建class对象,此时,会进行静态初始化,先执行静态字段初始化,再执行静态代码块。静态初始化只会在Class对象首次创建时进行一次。(编译器在加载过程中,发现有超类时,会先对超类进行加载,再依次往下加载,因为子类的static初始化可能会依赖于超类)

  2. 当创建对象时,首先在堆上分配足够的存储空间,将空间清零,自动将对象中的所有基本类型置为默认值,引用置为null。

  3. 先执行字段处初始化过程,再执行非静态代码块,最后执行构造器。(同上,如果类是子类,则从根超类依次向下执行初始化过程)

public class Sandwich extends Meal {
    private Bread d = new Bread();

    public Sandwich() {
        System.out.println("sandwich contructor");
    }

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

class Meal {
    private Cheese c = new Cheese();

    public Meal() {
        System.out.println("meal contructor");
    }
}

class Bread {

    public Bread() {
        System.out.println("Bread contructor");
    }
}

class Cheese extends Bread {

    public Cheese() {
        System.out.println("Cheese contructor");
    }
}
Bread contructor
Cheese contructor
meal contructor
Bread contructor
sandwich contructor

构造器

在父类的构造器中如果调用一个多态方法时,由于这个多态方法被子类覆写,但是此时子类还未初始化完全,该方法可能会操作子类中还未初始化完全的成员,可能会出现错误。在构造器中唯一能安全调用的方法是父类中的final,private方法,这些方法不能被覆写。

相关标签: java基础 java

上一篇:

下一篇: