JavaSE 初始化块 和 静态初始化块

本文详细介绍了Java中的初始化块,包括其作用、与构造函数的区别、静态初始化块的概念及其执行顺序等关键信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

初始化块

class Person{
    private String name;
    private int age;
    /*
    初始化块
    作用:给对象进行初始化
    对象一建立就运行,而且优先于构造函数执行。
    和构造函数的区别:
    构造代码块是给所有对象进行统一初始化,而构造函数是给对应的对象初始化

     构造代码块汇中定义的是不同对象共性的初始化内容。
    *///代码块 
        cry();  
    }  

    Person(){
    System.out.println("A.name"+name+",,age="+age);
    }

    Person(String n){
        name=n;
        System.out.println("B.name="+name+",,age="+age);
    } 

    public void cry(){
        System.out.println("cry...............");
    }
}

public class PersonDemo
{
    public static void main(String[] args)
    {
        person P1=new Person();
        person P2=new Person(Jack);
    }
}   

输出
cry…………..
name=null,,age=0
cry………..
name=Jack,,age=0


静态初始化块

如果定义初始化块的时候使用了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的无参数构造器");
    }

    public Mid(String msg) {
        this();                    //通过this调用同一类中重载的构造器
        System.out.println("Mid的带参数构造器"+msg);
    }
}

class Leaf extends Mid{
    static{
        System.out.println("Leaf的静态初始化块");
    }

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

    public Leaf(){
        super("java学习");              //通过super调用父类中有一个字符串的构造器         
        System.out.println("执行Leaf的构造器");;
    }
}

public class test{
    public static void main(String[] args)  {
        new Leaf();
        new Leaf();
    }
}

输出结果
这里写图片描述

第一次创建一个Leaf对象时,因为系统中还不存在Leaf类,因此需要先加载并初始化Leaf类,初始化Leaf类时会先执行其顶层父亲的静态初始化块,在执行其直接父亲的静态初始化块,最后执行Leaf本身的静态初始化块。
一旦Leaf类初始化成功之后,Leaf类在该须立即里将一直存在,因此当第二次创建Leaf实例时无需再次对Leaf类进行初始化。
每次创建一个Leaf对象,都需要先执行最顶层的初始化块,构造器,然后执行其父亲的初始化块,构造器。。。。最后执行Leaf类的初始化块,构造器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值