assert是Java中用于调试阶段检查程序假设的关键字,启用需加-ea参数,适用于验证内部状态而非运行时异常处理,禁用时无性能开销且不可替代输入校验。
assert 是 Java 中用于调试阶段检查程序假设是否成立的关键字,它不是用来处理运行时异常的,而是帮助开发者在开发和测试过程中快速发现逻辑错误。
Java 中 assert 有两种写法:
assert condition; —— 如果 condition 为 false,抛出 AssertionError
assert
condition : detailMessage; —— 当 condition 为 false 时,抛出带提示信息的 AssertionError,detailMessage 可以是字符串、数字或任意表达式注意:默认情况下 JVM 是禁用断言的。要启用它,必须在运行时加上 -ea(enable assertions)参数,例如:
java -ea MyProgram
也可以对特定包或类启用/禁用,比如 -ea:com.example... 或 -da:com.example.Test(disable assertions)。
断言适合验证那些「本不该发生」的内部状态,比如:
IllegalArgumentException)例如:
private int computeDays(int year) {
assert year > 0 : "year must be positive";
return isLeapYear(year) ? 366 : 365;
}
关键差异在于语义和生命周期:
AssertionError(继承自 Error),表示严重编程错误,不应被捕获;if 通常抛出 RuntimeException 或受检异常,可被合理处理因此,不要用 assert 替代输入校验、资源检查或业务规则判断。
assert i++ > 0),因为禁用断言后该代码不会执行,行为不一致-ea),以便捕获隐藏假设问题它不复杂但容易忽略——用对地方能显著提升代码可维护性,滥用则会降低健壮性。