断言是用于检测一个条件的语句,某种程度上就像一个if语句。如果违反条件,它就触发一个错误,让你知道应该在何处修订自己的假设。这是一种帮你减少出错机率的工具,尤其是减少那些与预期不符的错误。
那么,为什么要使用断言,而不使用传统方法(比如if-then-else,switch-case-default或者try-catch)呢?断言是专为调试而设计的,其他方法则主要用于生产。通过断言,可检测自己的逻辑是否正确,而不是通过它来捕捉不可控制的异常。
许多开发者都认为断言是最快和最有效的调试方式。比较以下代码即可看出差异:
If-then-else风格:
if (i % 3 != 0) {
if (i < 0)
{
System.err.println("Error in Variable i");
return -1;
}
System.out.println("Change $"+i%3);
断言风格:
if (i % 3 != 0) {
assert i > 0;
System.out.println("Change $"+i%3);
}
以上两段代码的工作方式几乎完全相同。如果变量i小于0(这是不正常的),第一段代码会报告Error in Variable i。第二段代码则引发一个断言错误,指出发生错误的行号。显然,断言方式所需的行数要少得多。
在代码中使用断言
有三种方式可在Java代码中使用断言。表A对此进行了总结。
表A
语法 | 例子 |
assert Expression1; | assert i%3==2; |
assert Expression1 : Expression2; | assert i%3==2 : "Wow, Error"; |
throw new AssertionError(Expression1); | throw new AssertionError("Oh no"); |