Java assert Keyword

2025年4月8日 | 阅读3分钟

Java 中的 assert 关键字用于调试目的。它主要用于通过在表达式求值为 false 时抛出 AssertionError 来测试代码中的假设。断言通常在开发和测试期间使用,但在运行时默认情况下是禁用的。

要启用断言,您需要在运行程序时使用 -ea(启用断言)JVM 选项。

语法

单个表达式

如果条件求值为 false,则会抛出 AssertionError。

带错误消息的表达式

如果条件为 false,则会抛出带有消息的 AssertionError。

程序 1:基本断言

示例

编译并运行

输出

Number is: 5

启用断言后

输出

Exception in thread "main" java.lang.AssertionError: Number is not greater than 10

解释

该程序演示了在 Java 中使用 assert 关键字在运行时验证假设;程序将 num 初始化为 5,并使用断言 assert num > 10 : "Number is not greater than 10",该断言检查 num 是否大于 10;由于条件为 false,当使用断言启用 (-ea) 执行时,将抛出带有消息 "Number is not greater than 10" 的 AssertionError,否则,将忽略断言,程序将打印 "Number is: 5"。

程序 2:在方法中使用断言

示例

编译并运行

输出

16
9

启用断言后

输出

16
Exception in thread "main" java.lang.AssertionError: Number should be non-negative
	at AssertionExample2.square(AssertionExample2.java:3)
	at AssertionExample2.main(AssertionExample2.java:7)

解释

该程序演示了在 Java 中使用 assert 关键字验证方法输入,确保给定数字为非负数,然后再计算其平方。当禁用断言时(默认模式),程序正常执行并打印 16 和 9,即使 square(-3) 违反了断言条件;然而,当使用 -ea 启用断言时,第二次方法调用失败,抛出带有消息 "Number should be non-negative" 的 AssertionError,终止执行。

程序 3:循环中的断言

示例

编译并运行

输出

Even number: 1
Even number: 2
Even number: 3
Even number: 4
Even number: 5

启用断言后

输出

Exception in thread "main" java.lang.AssertionError: Odd number encountered: 1

解释

该程序演示了在 Java 中使用 assert 关键字在执行期间验证条件;在此程序中,断言检查循环中的每个数字是否为偶数 (i % 2 == 0),如果条件失败(即 i 为奇数),则会抛出带有消息 "Odd number encountered: " 的 AssertionError;当不启用断言 (-ea 未使用) 运行时,将忽略断言,并打印所有数字(1 到 5);但是,当启用断言时(java -ea AssertionExample3),程序将在 i = 1 处以 AssertionError 终止。

要记住的重要事项

  1. 不应将断言用于常规错误处理或用户输入验证。它们旨在用于开发和调试,而不是用于运行时健壮性。
  2. 默认情况下,Java 运行时禁用断言,因此我们需要显式启用它们。