MENU

Java-35 代码块code block

October 8, 2023 • Read: 70 • Java阅读设置

面向对象编程

代码块 Code block

1 什么是代码块

1) 代码块属于类的成员,也就是说,代码块具有和属性、方法一样的性质,如非静态成员每个对象都会存在一份。
2) 代码块本质上是用{}括起来的一段代码,这段代码本质上与写在方法中的代码一样。
3) 代码块实际上是一段运行代码,也就是说,代码块是随着自身加载而运行的一段代码。因此,代码块主要用于初始化。

2 代码块的使用

1) 代码块的创建

  • 在类中定义代码块的格式为:{xxx}
  • 代码块不像属性和方法那样在创建时需要设置权限修饰符来限定权限,甚至都没有名字,代码块能且只能被关键字static修饰。

    • 可以这样理解:代码块的角色就是在对应类或对应对象创建时(本质上是代码块本身被加载时)执行的一段代码,因此不存在也不需要权限或代码块名。
      static关键字决定一个结构的加载,因此代码块是否使用static决定了其执行(或者其加载)的时机。

2) static代码块
代码块属于类的成员,static代码块与属性、方法等其他加了static的类的成员一样,意味着该结构随着类的加载而加载,只存在一份。

换句话说,static代码块是在类加载时运行的。

注意,代码块仅在自身加载时运行一次,也就是说,static代码块在类加载完成运行一次后就不会再运行了,只会运行一次。
因此,static代码块也无所谓被类的对象共享了,因为类加载时运行过了,即使实例化的对象共享它,也没有意义。

3) 非static代码块
代码块属于类的成员,因此非static代码块与类中其他非static结构一样,意味着该结构随着对象的加载而加载,每个对象都会有一份。

换句话说,非static代码块在对象构造时运行一次。

4) 代码块使用的其他注意点

  • 与其他类的成员一样,代码块也可以定义多个,但往往没有必要,因为都是在类或对象加载时运行一次后就没什么用了,所有要初始化的代码完全都可以放在一个代码块内。
  • 当定义了多个代码块时,多个代码块的按照其在类中声明的顺序执行。
  • 代码块运行代码先于构造器内部运行代码,也就是说如果构造对象时的构造方法中存在其他运行代码,先运行由构造对象加载出的代码块再运行构造方法中的运行代码。

3 示例

  • 具体理解,就要理解子类空参构造器隐式加载父类super(),并且子类构造的对象也相当于构造了父类的对象。
  • 简单理解,子类加载一定是先加载父类,因为子类要继承父类,然后子类的对象一定也是父类的对象,最后就是代码块先于构造器运行。
    2023-10-08T14:42:15.png
    2023-10-08T14:42:32.png
    2023-10-08T14:42:41.png