静态代码块

1.什么是静态代码块

        静态代码块在类加载的初始化阶段被执行,可用于确保在使用类时,相关的资源和变量已经被正确初始化,提高了代码的可维护性和可靠性。其格式为:

static {
 执行初始化的代码
}

2.静态代码块的作用

  • 能够执行需要优先被执行的代码。因为静态代码块在类加载阶段就被执行了,会先于构造方法以及其他代码块的执行。
  • 能够初始化静态变量和静态资源。通过静态代码块能够实现在程序运行前就能够对静态变量做初始化操作,并且能够提前加载静态资源。
  • 可用于执行一次性操作。由于类的初始化操作只会进行一次,所以静态代码块也只会执行一次,自然其中的操作也是一次性的。
  • 可用于加载驱动程序。比如加载数据库驱动,使用静态代码块可以使得驱动程序在类加载阶段就能被加载,确保进行数据库连接前已经加载好驱动程序了。

3.静态代码块、普通代码块以及构造器的执行顺序及区别

        构造器是用于创建一个类的实例的,所以构造器是在每次创建对象时被调用并初始化对象的成员变量;而静态代码块则是用于初始化静态成员,在类加载的初始化阶段被调用且只调用一次。由此可见静态代码块的执行要先于构造器的调用。       

        再来看普通代码块。先看格式:

{
    要执行的操作
}

        可见和静态代码块的格式上的区别就在于没有了static修饰,毕竟static就表示静态。

         普通代码块在执行构造器时被自动调用,所以普通代码块在每次创建实例时就会被调用一次;而静态代码块在类加载的初始化阶段被自动调用,所以执行顺序先于普通代码块,并且仅执行一次。 

        不过要注意的是,普通代码块先于构造器执行,原理结合另一篇博客:

       JVM学习-底层字节码的执行过程中的普通成员变量初始化部分。

        那普通代码块可以做什么呢?当我们写了多个构造器的时候,可能会出现有些重复的代码在每个构造器里都有,但是如果将这些代码放到普通代码块里面则可以避免重复代码,并且还能随构造器的调用而执行;只需要注意这些重复代码与其它构造器中的代码的执行顺序,如果需要最后执行这些重复代码显然是不行的。

        还有就是多个静态代码块或普通代码块的情况,同一类代码块的执行顺序和定义时的顺序保持一致,先写哪个代码块就先执行哪个。

        由此来看,静态代码块先执行,随后是普通代码块,最后是构造器。

4.补充

        静态代码块由于先执行,所以不能直接访问非静态成员,只能访问静态成员,毕竟静态代码块就是来初始化静态成员的。

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值