Java的构造代码块和静态代码块

1 什么是代码块

代码块又叫初始化块,是类的一部分,通过{}包围起来。代码块可以理解成一个,没有方法名,没有返回,没有参数,只有方法体的方法。而且,不用通过对象或类显式调用,而是在类加载时或者类实例化时默认调用。

2 代码块类型

  1. 普通代码块
  • 运行时机:构造代码块在每次创建对象时执行。
  • 访问限制:构造代码块可以访问类的所有成员,包括实例和静态成员。
  • 使用场景:当重载的构造器中有需要重复编写的代码时,可以使用代码块减少代码冗余。即如果多个构造器中都有重复的语句,可以将其抽取到代码块(也叫初始化块)中,提高代码的重用性。
  1. 静态代码块
  • 运行时机:静态代码块在类加载时执行,并且只执行一次。
  • 访问限制:静态代码块只能直接访问静态变量和方法。
    关于- 使用场景:当类初次加载时需要对某些数据进行初始化时,可以使用静态代码块进行处理。例如MySQL的Driver实现,在驱动类首次加载时注册Driver对象给DriverManager。

3 测试

  • 参考代码
class Parent{
    //静态代码块
    static{
        System.out.println("Parent的static代码块1");
    }
    static{
        System.out.println("Parent的static代码块2");
    }
    //普通代码块
    {
        System.out.println("Parent的普通代码块1");
    }
    //普通代码块
    {
        System.out.println("Parent的普通代码块2");
    }

    public Parent(){
        //(1)super()
        //(2)调用当前类的普通代码块
        //(3)调用当前类的构造器
        System.out.println("Parent构造器被调用");
    }
}

class Son extends Parent {
    //静态代码块
    static{
        System.out.println("Son的static代码块1");
    }
    //静态代码块
    static{
        System.out.println("Son的static代码块2");
    }
    //普通代码块
    {
        System.out.println("Son的普通代码块1");
    }
    //普通代码块
    {
        System.out.println("Son的普通代码块2");
    }
    public Son() {
        //(1)super()
        //(2)调用本类的普通代码块
        //(3)调用当前类的构造器
        System.out.println("Son构造器被调用");
    }
}
public class CodeBlockTest {
    public static void main(String[] args) {
        System.out.println("++++++++++第一次调用++++++++++");
        Son son1 = new Son();
        System.out.println("++++++++++第二次调用++++++++++");
        Son son2 = new Son();
    }
}
  • 执行结果
    在这里插入图片描述
  • 总结一下
    关于静态属性、静态代码块、代码块、构造方法的初始化顺序如下:
  1. 父类的静态代码块和静态属性初始化(优先级一样,按定义顺序执行)
  2. 子类的静态代码块和静态属性初始化(优先级一样,按定义顺序执行)
  3. 父类的普通代码块和普通属性初始化(优先级一样,按定义顺序执行)
  4. 父类的构造方法
  5. 子类的普通代码块和普通属性初始化(优先级一样,按定义顺序执行)
  6. 子类的构造方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值