java断言类代码 java中断言有哪几种形式( 六 )


assert ref != null:"ref doesn''t equal null";
assert isBalanced();
-----------------------------------------------------------------------------------
AssertinError类是Error的直接子类,因此代表程序出现了严重的错误,这种异常通常是不需要程序员使用catch语句捕捉的 。
使用assert的准则:assert语句的作用是保证程序内部的一致性,而不是用户与程序之间的一致性,所以不应用在保证命令行参数的正确性 。可以用来保证传递给private方法参数的正确性 。因为私有方法只是在类的内部被调用 , 因而是程序员可以控制的,我们可以预期它的状态是正确和一致的 。公有方法则不适用 。此外,assert语句可用于检查任何方法结束时状态的正确性,及在方法的开始检查相关的初始状态 等等 。
assert语句并不构成程序正常运行逻辑的一部分,时刻记住在运行时它们可能不会被执行 。
-----------------------------------------------------------------------------------
两类参数:
参数 -esa和 -dsa:
它们含义为开启(关闭)系统类的assertion功能 。由于新版本的Java的系统类中,也使了 assertion语句,因此如果用户需要观察它们的运行情况,就需要打开系统类的assertion功能  , 我们可使用-esa参数打开 , 使用 -dsa参数关闭 。-esa和-dsa的全名为-enablesystemassertions和-disenablesystemassertions,全名和缩写名有同样的功能 。
参数 -ea和 -ea:
它们含义为开启(关闭)用户类的assertion功能:通过这个参数,用户可以打开某些类或包的assertion功能 , 同样用户也可以关闭某些类和包的assertion功能 。打开assertion功能参数为-ea;如果不带任何参数,表示打开所有用户类;如果带有包名称或者类名称,表示打开这些类或包;如果包名称后面跟有三个点,代表这个包及其子包;如果只有三个点,代表无名包 。关闭 assertion功能参数为-da , 使用方法与-ea类似 。
-ea和-da的全名为-enableassertions和-disenableassertions,全名和缩写名有同样的功能 。
下面表格表示了参数及其含义,并有例子说明如何使用 。
参数例子说明
-eajava -ea打开所有用户类的assertion
-dajava -da关闭所有用户类的assertion
-ea:java -ea:MyClass1打开MyClass1的assertion
-da:java -da: MyClass1关闭MyClass1的assertion
-ea:java -ea:pkg1打开pkg1包的assertion
-da:java -da:pkg1关闭pkg1包的assertion
-ea:...java -ea:...打开缺省包(无名包)的assertion
-da:...java -da:...关闭缺省包(无名包)的assertion
-ea:...java -ea:pkg1...打开pkg1包和其子包的assertion
-da:...java -da:pkg1...关闭pkg1包和其子包的assertion
-esajava -esa打开系统类的assertion
-dsajava -dsa关闭系统类的assertion
-----------------------------------------------------------------------------------
不要再public的方法里面检查参数是不是为null之类的操作,例如:
public int get(String s){
assert s != null;
}
如果需要检查也最好通过 if s = null抛出 NullPointerException来检查 。
不要用assert来检查方法操作的返回值来判断方法操作的结果,例如:
assert list.removeAll();这样看起来好像没有问题 但是想想如果assert 被disable呢,那样java断言类代码他就不会被执行了,所以removeAll()操作就没有被执行 , 可以这样代替
boolean boo = list.removeAl();
assert boo;
-----------------------------------------------------------------------------------
另外,Java为了让程序也能够动态开启和关闭某些类和包的assertion功能 , Java修该了Class和ClassLoader的实现 , 增加了几个用于操作assert的API 。下面简单说明一下几个API的作用 。

推荐阅读