【Java】Java中类的初始化顺序(静态方法,静态块,非静态块,最后有流程图)
在Java中,类的初始化顺序涉及到静态块、静态变量初始化、非静态块、构造函数的执行顺序。以下是执行顺序:
- 加载类(只进行一次)。
- 执行静态变量初始化(在静态变量定义处直接赋值的内容)。
- 执行静态代码块(按定义顺序执行)。
- 完成静态方法的初始化。
- 创建对象(非静态块)。
- 执行非静态代码块(按定义顺序执行)。
- 执行构造函数。
下面是一个示例代码,并且有一个简单的流程图来表示初始化顺序:
public class InitializationOrderExample {
static String staticField = "静态变量";
static {
System.out.println(staticField);
System.out.println("静态代码块1");
}
{
System.out.println("非静态代码块");
}
public InitializationOrderExample() {
System.out.println("构造函数");
}
static {
System.out.println("静态代码块2");
}
public static void main(String[] args) {
new InitializationOrderExample();
new InitializationOrderExample();
}
}
执行这段代码,你会看到输出顺序是:
静态变量
静态代码块1
静态代码块2
非静态代码块
构造函数
非静态代码块
构造函数
流程图如下:
+--------+ +------------------+ +------------------+
| | | | | |
| 加载类 |---------->| 静态变量初始化 |---------->| 静态代码块1 |
| | | | | |
+--------+ +------------------+ +------------------+
yes no
| |
| (仅在首次加载类时执行) |
| |
v v
+--------+ +------------------+ +------------------+
| | | | | |
| 执行main| | 静态代码块2 | | 非静态代码块 |
| | | | | |
+--------+ +------------------+ +------------------+
yes no
| |
| (每次创建对象时执行) |
| |
v v
+--------+ +------------------+ +------------------+
| | | | | |
| 构造函数 |<---|
评论已关闭