随笔-35  评论-97  文章-0  trackbacks-0
 

1.1.       语法表示

两种表达式,分别如下:

assert expression1;

assert expression1: expression2;

1.2.       语义含义

1.        在运行时,如果关闭了assertion功能,这些语句将不起任何作用。

2.        如果打开了assertion功能,那么expression1的值将被计算,如果它的值为false,该语句强抛出一个AssertionError对象。如果assertion语句包括expression2参数,程序将计算出expression2的结果,然后将这个结果作为AssertionError的构造函数的参数,来创建AssertionError对象,并抛出该对象;如果expression1值为trueexpression2将不被计算。

3.        一种特殊情况是,如果在计算表达式时,表达式本身抛出Exception,那么assert将停止运行,而抛出这个Exception

1.3.       运行

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

打开MyClass1assertion

-da:<classname>

java -da: MyClass1

关闭MyClass1assertion

-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

关闭MyClass1pkg1包的assertion

其中...代表,此包和其子包的含义。例如我们有两个包为pkg1pkg1.subpkg。那么pkg1...就代表pkg1pkg1.subpkg两个包。

 

1.4.       Assert使用场合

1.4.1.                适宜使用场合

1.        使用assert来检查privateprotected函数中的参数预处理(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来验证参数。

这些函数应该抛出NullPointerExceptionIllegalArgumentException,或者其他相关的exception

2.        不要使用assert来检查软件用户的错误。应该抛出IllegalArgumentException

3.        不要使用assert来完成任何工作。如果你使用了assert来完成一些功能,那么assertions一旦被关闭了怎么办?

4.        不要无聊地将assert抛出的错误消息国际化。一旦assertions关闭,你不是白做工了?

posted on 2007-05-19 01:42 三告习习 阅读(627) 评论(0)  编辑  收藏 所属分类: java/jdk

只有注册用户登录后才能发表评论。


网站导航: