0
点赞
收藏
分享

微信扫一扫

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


初始化块  类里的第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进行初始化。

举报

相关推荐

0 条评论