一、什么是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代码块的执行顺序是:
- 静态代码块:在类加载时执行,只执行一次。
- 构造代码块:在每次创建对象时执行,与构造函数同时执行。
- 普通代码块:在函数中执行。
由于静态代码块只执行一次,一般用来初始化静态变量。
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,则会编译报错。