【初始化块】 类里的第4种成员(除Field、方法和构造器)

本文详细解释了Java中初始化块的概念,包括其用途、作用范围及与构造器的区别,并通过示例展示了类初始化顺序的过程。

初始化块  类里的第4种成员(除Field、方法和构造器)

初始化块的修饰符只能是static.创建对象时先按照顺序依次执行初始化块,然后执行构造器。

与构造器不同的是,初始化块是一段固定执行的代码,它不接收任何参数,因此初始化块对同一个类的所有对象的初始化处理完全相同。

与构造器类似,创建一个对象时,先向上追溯先执行父类中的初始化块,依次往下执行。

系统将在类初始化阶段执行静态初始化块,而不是在创建对象时才执行,因此静态初始化块总是比普通初始化块先执行。

 

class Root

{

    static

    {

        System.out.println("Root的静态初始化块");

    }

    {

        System.out.println("Root的普通初始化块");

    }

    public Root()

    {

        System.out.println("Root的无参数构造器");

    }

}

 

class Mid extends Root

{

    static

    {

        System.out.println("Mid的静态初始化块");

    }

    {

        System.out.println("Mid的普通初始化块");

    }

    public Mid()

    {

        System.out.println("Mid的无参数构造器");

    }

}

 

class Leaf extends Mid

{

    static

    {

        System.out.println("Leaf的静态初始化块");

    }

    {

        System.out.println("Leaf的普通初始化块");

    }

    public Leaf()

    {

        System.out.println("Leaf的无参数构造器");

    }

}

 

public class Test

{

    public void main(String[] args)

    {

        new Leaf();

        System.out.println("\n\n");

        new Leaf();

    }

}

 

执行结果为:

            Root的静态初始化块

Mid的静态初始化块

Leaf的静态初始化块

Root的普通初始化块

Root的无参数构造器

Mid的普通初始化块

Mid的无参数构造器

Leaf的普通初始化块

Leaf的无参数构造器

 

 

 

Root的普通初始化块

Root的无参数构造器

Mid的普通初始化块

Mid的无参数构造器

Leaf的普通初始化块

Leaf的无参数构造器

 

第一次创建Leaf对象时执行了静态初始化块,第二次没有执行。说明一旦Leaf类初始化成功后,Leaf类在该虚拟机里将一直存在,因此在第二次创建Leaf实例时无须再次对Leaf进行初始化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值