《Java编程艺术》章节选登。作者:高永强 清华大学出版社 (即将出版)
11.9 断言——assert
断言语句
assert
在
JDK1.4
中首次提供,专门用来进行代码测试和纠错,以提高程序的可靠性。它可以被应用在程序中的任何位置,也被称为运行断点。编程人员在
assert
语句中提供测试数据的范围或者条件,作为断言或者声明(
assertion
)。例如,年龄必须大于
18
岁,提供的断言则是:
age > 18
如果断言为真,即代码中变量
age
的值大于
18
,程序将正常运行;而断言为假时,这个断言异常将被
JVM
抛出,程序将停止运行,并且打印这个异常信息。
断言语句是一种特殊语句,因为它在运行时可以被设置为开启或者关闭。断言关闭是许多
IDE
系统预设的状态,在运行时,
JVM
将忽略代码中所有断言语句,所以程序可以更加有效地运行。而需要执行断言时,可设置断言开启选项。在操作系统中利用
Java
指令运行程序时,必须输入开启断言选项。
如下小节将讨论断言语句的编写、断言状态设置,以及它的应用。
11.9.1 断言编写
断言语句的语法格式如下:
assert booleanExpression [: message];
assert
——
Java
关键字。
booleanExpression
——布尔代数表达式,为声明的断言。
[:message]
——可选项。需要打印的字符串异常信息。
注意,断言语句以分号结束。
为了代码可读性,布尔代数表达式一般用括号括起。下面讨论几个具体例子:
例
1
.
//
完整程序存在本书配套资源目录
Ch11
中名为
AssertTest.java
int age = 17;
assert (age > 18) : "Age must be greater than 18";
这个例子中的断言语句声明变量
age
必须大于
18
,否则将抛出断言异常。这段代码运行后,程序将停止运行,并打印如下信息:
Exception in thread "main" java.lang.AssertionError: Age must be greater than
18.
at AssertTest.main(AssertTest.java:11)
如果
age
的值大于
18
,符合断言,程序将继续正常运行。
例
2
.
//
完整程序存在本书配套资源目录
Ch11
中名为
AssertTest.java
double total = 219.98;
assert (total > 0 .0 && total < 200.0) : "total: " + total + " – out of the
rang
e
.";
这段代码运行后,程序将停止运行,并将打印如下信息:
Exception in thread "main" java.lang.AssertionError: total: 219.98 – out of
the range.
at AssertTest.main(AssertTest.java:10)
然而,如果
total
的值在声明的断言范围之内,程序将继续正常运行。
如果我们利用
if
语句模拟断言语句的执行功能,上面的例子可以编写如下:
//
完整程序存在本书配套资源目录
Ch11
中名为
AssertTest.java
double total = 219.98;
if (total <= 0.0 || total >= 200.0) { //
超出合法值范围
System.out.println("total: " + total + " – out of the rang
e.
");
System.out.println("at AssertTest.main(AssertTest.java:10) ");
System.exit(0);
}
这段代码运行后,程序将停止运行,并将打印如下信息:
total: 219.98 – out of the range.
at AssertTest.main(AssertTest.java:10)
11.9.2 开启和关闭断言
在编译时必须设置断言语句为开启状态,即设立编译选项
-ea
,断言语句才参与运行。
ea
即
enable assertion
,可分如下几种设置情况:
l
在操作系统中利用
java
对已经编译的程序运行时,加入断言开启选项
-ea
。如:
java
——
ea ClassName
如果使用:
java ClassName.
再次对该程序运行时,断言语句将关闭,
JVM
将忽略程序中的所有断言语句。
更多信息
也可以利用
java –da ClassName
关闭断言语句并运行这个程序。
da
即
disable assertion
。
l
在
Eclipse
中设置断言语句状态。其步骤如下:
Run
菜单
Run...
Arguments
在
VM Arguments
窗口中,输入:
-ea
,或者
-enableassertions
Apply
Run
如果需要关闭断言设置时,进入
VM Arguments
窗口,删除输入的设置即可。
l
在
TextPad
中设置断言语句状态。其步骤如下:
Configure
菜单
Preference
Tools
Run Java Application
在
Parameters
的窗口条中的开始输入:
-ea (
注意
,
在
-ea
后必须留有一个空格
)
确定
如果需要在TextPad中关闭断言设置时,在Parameters窗口条中删除输入的设置即可。
本文转自高永强51CTO博客,原文链接:http://blog.51cto.com/yqgao/156706 ,如需转载请自行联系原作者