两种表达式,分别如下:
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
三告习习 阅读(627)
评论(0) 编辑 收藏 所属分类:
java/jdk