Java 断言

本文最后更新于:2024年3月18日 凌晨

Java 断言

  • 断言(Assertion)是一种调试程序的方式,在Java中,使用assert关键字来实现断言。
  • 断言在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制,一般来说,断言用于保证程序最基本,关键的正确性,断言检查通常在开发和测试时开启,为了保证程序的执行效率,在软件发布后断言检查通常是关闭的,断言是一个包含布尔表达式的语句,在执行这个语句时假定该表达式为true,如果表达式的值为false,那么系统会报告一个AssertionError
  • 注意:断言不应该以任何方式改变程序的状态,简单的说,如果希望在不满足某些条件时阻止代码的执行,就可以考虑用断言来阻止它。

语法

  • assert关键字有两种用法:
1
assert <boolean表达式>
  • 如果<boolean表达式>为true,则程序继续执行。
  • 如果为false,则程序抛出AssertionError,并终止执行。
1
assert <boolean表达式> : <错误信息表达式>
  • 如果<boolean表达式>为true,则程序继续执行。
  • 如果为false,则程序抛出java.lang.AssertionError,并输入<错误信息表达式>

实例

1
2
3
4
5
public static void main(String[] args) {
double x = Math.abs(-123.45);
assert x >= 0;
System.out.println(x);
}
  • 语句assert x >= 0;即为断言,断言条件x >= 0预期为true,如果计算结果为false,则断言失败,抛出AssertionError

配置

  • 要在运行时启用断言,可以在启动JVM时使用-enableassertions或者-ea标记,要在运行时选择禁用断言,可以在启动JVM时使用-da或者-disableassertions标记,要在系统类中启用或禁用断言,可使用-esa-dsa标记,还可以在包的基础上启用或者禁用断言。

默认执行程序,没有开启-ea开关

1
2
3
4
$ java AssertFoo
断言1没有问题。
-----------------
断言2没有问题。

开启-ea开关,执行程序

1
2
3
4
5
$ java -ea AssertFoo
断言1没有问题。
-----------------
Exception in thread "main" java.lang.AssertionError:断言失败,此表达式的信息将会在抛出异常的时候输出!
at AssertFoo.main(AssertFoo.java:10)

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!