兩種表達式,分別如下:
assert expression1;
assert expression1: expression2;
1. 在運行時,如果關閉了assertion功能,這些語句將不起任何作用。
2. 如果打開了assertion功能,那么expression1的值將被計算,如果它的值為false,該語句強拋出一個AssertionError對象。如果assertion語句包括expression2參數,程序將計算出expression2的結果,然后將這個結果作為AssertionError的構造函數的參數,來創建AssertionError對象,并拋出該對象;如果expression1值為true,expression2將不被計算。
3. 一種特殊情況是,如果在計算表達式時,表達式本身拋出Exception,那么assert將停止運行,而拋出這個Exception。
1. 這種程序必須在JDK1.4(或者更高版本)的JRE下運行。
2. 參數 -esa和 -dsa:
它們含義為開啟(關閉)系統類的assertion功能。 -esa和-dsa的全名為-enablesystemassertions和-disenablesystemassertions,全名和縮寫名有同樣的功能。
3. 參數 -ea和 -ea:
它們含義為開啟(關閉)用戶類的assertion功能。
-ea和-da的全名為-enableassertions和-disenableassertions,全名和縮寫名有同樣的功能。
下面表格表示了參數及其含義。
參數
|
例子
|
說明
|
-ea
|
java -ea
|
打開所有用戶類的assertion
|
-da
|
java -da
|
關閉所有用戶類的assertion
|
-ea:<classname>
|
java -ea:MyClass1
|
打開MyClass1的assertion
|
-da:<classname>
|
java -da: MyClass1
|
關閉MyClass1的assertion
|
-ea:<packagename>
|
java -ea:pkg1
|
打開pkg1包的assertion
|
-da:<packagename>
|
java -da:pkg1
|
關閉pkg1包的assertion
|
-ea:...
|
java -ea:...
|
打開缺省包(無名包)的assertion
|
-da:...
|
java -da:...
|
關閉缺省包(無名包)的assertion
|
-ea:<packagename>...
|
java -ea:pkg1...
|
打開pkg1包和其子包的assertion
|
-da:<packagename>...
|
java -da:pkg1...
|
關閉pkg1包和其子包的assertion
|
-esa
|
java -esa
|
打開系統類的assertion
|
-dsa
|
java -dsa
|
關閉系統類的assertion
|
綜合使用
|
java -dsa:MyClass1:pkg1
|
關閉MyClass1和pkg1包的assertion
|
其中...代表,此包和其子包的含義。例如我們有兩個包為pkg1和pkg1.subpkg。那么pkg1...就代表pkg1和pkg1.subpkg兩個包。
1.4.1. 適宜使用場合
1. 使用assert來檢查private和protected函數中的參數預處理(preconditions)和后處理(postconditions)。
2. 使用assert來檢查參數或者變量的特殊值,一旦參數或者變量為這些特殊值,則跟這些參數有變量有關的操作不應該出現。
eg.
Object source = event.getSoure();

Assert(source != null);

…….

Int hc = source.hashCode();//一些使用source的代碼


3. 使用assert來檢查控制流(無效代碼分支)。
eg.

If(source == yesBtn)
{// do code
}

else If(source == noBtn)
{// do code
}

else If(source == cancelBtn)
{// do code
}

else
{
assert false; "Invalid Source " +source.toString();
}

4. 使用assert來檢查你的返回值(傳遞條件)。
Eg.

public Object someMedth()
{
Object result = null;
…… //do some code that sets result
Asset(result !=null); // check post condition
return result;
}


1.4.2. 不適宜使用場合
1. 不要在public函數中使用assert來驗證參數。
這些函數應該拋出NullPointerException,IllegalArgumentException,或者其他相關的exception。
2. 不要使用assert來檢查軟件用戶的錯誤。應該拋出IllegalArgumentException。
3. 不要使用assert來完成任何工作。如果你使用了assert來完成一些功能,那么assertions一旦被關閉了怎么辦?
4. 不要無聊地將assert拋出的錯誤消息國際化。一旦assertions關閉,你不是白做工了?
posted on 2007-05-19 01:42
三告習習 閱讀(637)
評論(0) 編輯 收藏 所屬分類:
java/jdk