🗒️代码块
Mar 24, 2024
| Mar 24, 2024
0  |  Read Time 0 min
type
status
date
slug
summary
tags
category
icon
password
在Java中,代码块是一种被大括号 {} 包围的代码片段。
【❖ 代码块≠方法】
代码块不是方法。在Java中,方法是具有名称、返回类型、可能的参数以及围绕这些参数的一组语句,用于执行特定的操作。相比之下,代码块通常是指一组被大括号 {} 包围的语句,它们可以存在于方法内部,但本身并不构成一个完整的方法。
【❖ try { ... } catch { ... }不算是代码块】
try { ... } catch { ... } 实际上是“try-catch”结构的一部分,是异常处理的一种形式。虽然它也是用大括号包围的代码块,但在Java的常规分类中,它不被单独视为上述四种类型之一的代码块。然而,如果我们把它看成更广泛意义上的“代码块”,因为它确实定义了一个特定的执行区域,那么它可以被认为是一个特殊的代码块,用于错误处理。但在常规的分类中,人们通常不将“try-catch”结构视为独立的代码块类型。

1. 普通代码块(Normal Blocks)

普通代码块(也叫局部代码块)定义在方法内部,可以限定变量生命周期,及早释放,提高内存利用率。局部代码块在方法调用时执行,并且每次调用方法时都会执行。

2. 构造代码块(Constructor Blocks)

直接在类中定义且没有加static关键字的代码块称为构造代码块(也叫实例初始化块)。是Java中用于初始化对象的一个代码块,属于实例成员的一部分。
每次创建类的实例时,构造代码块就会执行。如果有多个构造代码块,它们将按照在类中出现的顺序依次执行。构造代码块的执行总是在构造函数之前,无论是默认构造函数还是自定义构造函数。
构造代码块主要用于初始化那些不依赖于构造函数参数的实例变量,或者在多个构造函数之间共享一些代码。

3. 静态代码块(Static Blocks)

静态代码块,也称为静态初始化块,是Java语言中的一个概念。它是一个在Java类中定义的代码块,使用static关键字修饰。静态代码块可以被用来进行静态变量的初始化或执行静态初始化操作。
在Java程序中,静态代码块有以下几个特点:
  1. 静态代码块只会被执行一次,当类被加载到JVM(Java虚拟机)中时执行。
  1. 如果一个类中包含多个静态代码块,它们将按照在代码中出现的顺序被执行。
  1. 静态代码块执行时机早于构造函数,且早于非静态代码块。
  1. 静态代码块主要用于初始化类的静态变量,尤其是当初始化过程复杂时更为常用。
在这个例子中,静态代码块被用来初始化nummyStr这两个静态变量。当MyClass类被加载时,静态代码块将被执行,并且只执行一次。

4. 同步代码块(Synchronized Blocks)

同步代码块(Synchronized Blocks)是Java中用于实现线程同步的一种机制。线程同步是多线程编程中的一个重要概念,它用于防止多个线程同时访问共享资源,从而避免数据的不一致性或损坏。
同步代码块通过synchronized关键字来定义。当某个线程进入一个同步代码块时,它会获得一个锁(也称为监视器锁),其他试图进入该同步代码块的线程将被阻塞,直到当前线程离开同步代码块释放锁。这样,同一时间内只有一个线程可以执行同步代码块中的代码,保证了共享资源操作的线程安全。
语法格式:
这里的“对象引用”是同步代码块所使用的锁对象,不同线程对同一个锁对象争夺将导致其他线程等待。
以下是同步代码块的一个示例:
在这个例子中,incrementdecrement方法中的代码被放置在同步代码块中,以this(当前实例)作为锁对象。当一个线程执行这些同步代码块时,其他线程将无法同时执行这些同步代码块中的任何部分,直到当前线程完成。

代码块的执行顺序总结

代码块的执行顺序如下:
  1. 静态代码块(只在类加载时执行一次)
  1. main()方法
  1. 构造代码块(每次创建对象时执行)
  1. 构造方法(每次创建对象后执行)
  1. 普通代码块(每次调用方法或执行语句时根据逻辑执行)
 
在继承关系中,代码块的执行顺序为:
  1. 父类静态代码块
  1. 子类静态代码块
  1. 父类构造代码块
  1. 父类构造方法
  1. 子类构造代码块
  1. 子类构造方法
  • java
  • java basics
  • 辨析:成员变量、静态变量、局部变量向上转型与向下转型
    Catalog