Assertion是用於在開發期間測試自己的些假設,當部屬程式時則會被清除。這能夠快速和有效地檢測與修正程式中的錯誤。該特性從Java 1.4開始被支援。
一、Assertion語句的兩種形式:
1, 一種最簡單的形式:assert Expression1;
2, 另一種是: assert Expression1: Expression2;
其中Expression1必須是boolean值,如果Expression1結果ture則程式正常運行,如果為false則出現AssertionError異常;Expression2可以中是能夠產生值的任何內容,這個運算式用於產生字串訊息,該訊息顯示在棧軌跡內,以提供更多的調試資訊。
二、樣本:
第一種形式:
public class AssertDemo {
public static void main (String[] args) {
int argsLength = args.length;
assert(argsLength > 0);
for (String s : args) {
System.out.println(" > " + s);
}
}
}
編譯之後,在運行時需要使用-ea或-enableassertions來啟用Assertion,因為Assertion是預設禁用的。
在這個例子中如果使用java -ea AssertDemo則會出現拋出AssertionError異常:
Exception in thread "main" java.lang.AssertionError
at AssertDemo.main(AssertDemo.java:5)
第二種形式:
另外還可以使用第二種方式增加額外的資訊:
public class AssertDemo {
public static void main (String[] args) {
int argsLength = args.length;
assert(argsLength > 0): "Arguments expected.";
for (String s : args) {
System.out.println(" > " + s);
}
}
}
再一次編譯並使用java -ea AssertDemo 執行後將得到如下資訊:
Exception in thread "main" java.lang.AssertionError: Arguments expected.
at AssertDemo.main(AssertDemo.java:5)
注意:這隻是一個樣本程式,有些情況並不適合使用斷言。事實上,該樣本就是不適合使用斷言的例子
三、適當地使用斷言
雖然能夠用try/catch來捕獲Assertion拋出的異常,但決不能這樣做。另外:
1,不要使用斷言驗證公用方法的參數,因為assert語句不能確保被執行,所以公用方法的任何約束應該由方法自己強制執行。
2,不要使用斷言驗證命令列參數,與前面一條規則類似,參數的驗證應該由程式自己來執行。
3,不要使用可能產生副作用的斷言運算式。
四、參考文獻
[1]Programming With Assertions, Sun Java Documentation, http://java.sun.com/j2se/1.4.2/docs/guide/lang/assert.html
[2]SCJP學習指南,Kathy sierra & Bert Bates,人民郵電出版社
http://hi.baidu.com/fwso/blog/item/6f4d8802acbe7a0b4bfb51b7.html