您的位置:

Java代码块

一、什么是Java代码块

Java代码块指的是用“{}”括起来的一段代码,在Java中分为三种类型:

  • 普通代码块
  • 构造代码块
  • 静态代码块

普通代码块是在方法中使用,构造代码块是在类中成员变量定义前面使用,静态代码块是在类中成员变量定义后面使用。

public class CodeBlockExample {
  int num1 = 10;
  int num2;
  static int num3;
  
  // 构造代码块
  {
    num1 = 20;
    System.out.println("构造代码块执行了");
  }
  
  // 静态代码块
  static {
    num3 = 30;
    System.out.println("静态代码块执行了");
  }
  
  // 普通代码块
  public void method() {
    num2 = 50;
    {
      int num4 = 40;
      System.out.println(num4);  // 输出40
    }
    System.out.println(num1);  // 输出20
    System.out.println(num2);  // 输出50
  }
}

二、Java代码块执行顺序

在Java中,Java代码块的执行顺序是:

  1. 静态代码块:在类加载时执行,只执行一次。
  2. 构造代码块:在每次创建对象时执行,与构造函数同时执行。
  3. 普通代码块:在函数中执行。

由于静态代码块只执行一次,一般用来初始化静态变量。

public class CodeBlockOrderExample {
  String name;
  static int num;
  {
    name = "Tom";
    System.out.println("构造代码块执行了");
  }
  
  static {
    num = 10;
    System.out.println("静态代码块执行了");
  }
  
  public CodeBlockOrderExample() {
    System.out.println("构造函数执行了");
  }
  
  public void method() {
    System.out.println("普通方法执行了");
  }
  
  public static void main(String[] args) {
    CodeBlockOrderExample example = new CodeBlockOrderExample();
    example.method();
    System.out.println("num=" + CodeBlockOrderExample.num);  // 输出num=10
  }
}

三、Java代码块的应用场景

Java代码块在实际开发中有很多应用场景,例如:

  • 变量初始化
  • 资源释放
  • 单例模式的实现
  • 多线程并发控制

下面以变量初始化为例:

public class CodeBlockApplicationExample {
  int num1;
  final int num2;
  
  {
    num2 = 20;
    System.out.println("num2=" + num2);  // 输出num2=20
  }
  
  public CodeBlockApplicationExample(int num1) {
    this.num1 = num1;
    System.out.println("num1=" + num1);  // 输出num1=10
  }
  
  public static void main(String[] args) {
    CodeBlockApplicationExample example = new CodeBlockApplicationExample(10);
    System.out.println("num2=" + example.num2);  // 输出num2=20
  }
}

在该例子中,num1是成员变量,没有初始化的值为0,而num2是final类型的成员变量,必须在定义时或使用构造代码块进行初始化。如果不使用构造代码块初始化num2,则会编译报错。