java中代码块、方法-执行顺序
在 Java 中,代码块、静态代码块、构造方法、静态方法和普通方法的执行顺序。这是 Java 类初始化过程中的核心知识点。
一、执行顺序详解
Java 中这些元素的执行遵循一个固定的顺序,我们可以通过一个示例来清晰地展示:
public class ExecutionOrderDemo {
// 静态变量
private static String staticVar = "静态变量初始化";
// 普通成员变量
private String instanceVar = "实例变量初始化";
// 静态代码块
static {
System.out.println(staticVar);
System.out.println("静态代码块执行");
// 可以调用静态方法
staticMethod();
}
// 普通代码块(实例代码块)
{
System.out.println(instanceVar);
System.out.println("普通代码块执行");
// 可以调用普通方法
instanceMethod();
}
// 构造方法
public ExecutionOrderDemo() {
System.out.println("构造方法执行");
}
// 静态方法
public static void staticMethod() {
System.out.println("静态方法执行");
}
// 普通方法
public void instanceMethod() {
System.out.println("普通方法执行");
}
public static void main(String[] args) {
System.out.println("--- 创建第一个对象 ---");
ExecutionOrderDemo demo1 = new ExecutionOrderDemo();
System.out.println("--- 创建第二个对象 ---");
ExecutionOrderDemo demo2 = new ExecutionOrderDemo();
System.out.println("--- 主动调用方法 ---");
demo1.staticMethod();
demo1.instanceMethod();
}
}
运行结果:
静态变量初始化
静态代码块执行
静态方法执行
--- 创建第一个对象 ---
实例变量初始化
普通代码块执行
普通方法执行
构造方法执行
--- 创建第二个对象 ---
实例变量初始化
普通代码块执行
普通方法执行
构造方法执行
--- 主动调用方法 ---
静态方法执行
普通方法执行
二、执行顺序总结
从上述运行结果,我们可以总结出明确的执行顺序:
-
类加载阶段(仅一次):
- 静态变量初始化:在类第一次被使用时初始化。
- 静态代码块执行:紧随静态变量之后执行,且只执行一次。
-
对象实例化阶段(每次创建对象):
- 实例变量初始化:每次创建对象时初始化。
- 普通代码块执行:紧随实例变量之后执行。
- 构造方法执行:最后执行,完成对象的初始化。
-
方法调用阶段(按需执行):
- 静态方法:可以通过类名直接调用,也可以通过对象调用,但它属于类本身,不依赖于实例。
- 普通方法:必须通过实例化的对象才能调用,属于对象的行为。
三、关键点回顾
- 静态元素优先:静态变量和静态代码块在类加载时执行,且只执行一次。
- 实例元素随后:实例变量、普通代码块和构造方法在每次创建对象时执行,顺序是变量初始化 → 普通代码块 → 构造方法。
- 方法按需调用:静态方法和普通方法不会自动执行,需要显式调用才会执行。
linhuaming

浙公网安备 33010602011771号