四、assertion的使用
assertion的使用是一个复杂的问题,通常来说,assertion用于检查一些关键的值,并且这些值对整个程序,或者局部功能的完成有很大的影响,并且这种错误不容易恢复的 。
assertion表达式应该短小、易懂,如果需要评估复杂的表达式,应该使用函数计算 。以下是一些使用assertion的情况的例子,这些方式可以让java程序的可靠性更高 。
检查控制流; 在if-then-else和swith-case语句中,我们可以在不应该发生的控制支流上加上assert false语句 。如果这种情况发生了 , assert能够检查出来 。
在私有函数计算前 , 检查输入参数是否有效;对于一私有些函数,要求输入满足一些特定的条件,那么我们可以在函数开始处使用assert进行参数检查 。
对于公共函数,我们通常不使用assertion检查,因为一般来说 , 公共函数必须对无效的参数进行检查和处理 。而私有函数往往是直接使用的 。例如:某函数可能要求输入的参数必须不为null 。那么我们可以在函数的一开始加上:
assert parameter1!=null : "paramerter is null in test method";
在函数计算后 , 检查函数结果是否有效;对于一些计算函数 , 函数运行完成后,某些值需要保证一定的性质,因此我们可以通过assert检查该值 。例如,我们有一个计算绝对值的函数,那么我们就可以在函数的结果处,加上一个语句:
assertvalue=https://www.04ip.com/post/0:"Value should be bigger than 0:"+value;
通过这种方式,我们可以对函数计算完的结果进行检查 。检查程序不变量;有些程序中,存在一些不变量,在程序的运行生命周期,这些不变量的值都是不变的 。这些不变量可能是一个简单表达式,也可能是一个复杂的表达式 。
对于一些关键的不变量 , 我们可以通过assert进行检查 。例如 , 在一个财会系统中,公司的支出和收入必须保持一定的平衡关系,因此我们可以编写一个表达式检查这种平衡关系,如下表示:
private boolean isBalance() {……}
在这个系统中,在一些可能影响这种平衡关系的方法的前后,我们都可以加上assert验证:
assert isBalance():"balance is destoried";
五、补充
必须清楚AssertionError是继承自Error得,因此你可以不再程序中catch它的,当然你也可以在程序中catch它然后程序可以继续执行 。
例如:
public class AssertTest
{
public static void main(String[] args)
{
AssertTest at = new AssertTest();
try
{
at.assertMe(true);
at.assertMe(false);
}
catch(AssertionError ae)
{
System.out.println("AsseriontError catched");
}
System.out.println("go on");
}
privatevoid assertMe(boolean boo)
{
assert boo?true:false;
System.out.println("true condition");
}
}
Assert最好不要滥用,原因是assert并不一定都是enable的 , 下面两种情况就不应该用assert
不要再public的方法里面检查参数是不是为null之类的操作
例如public int get(String s)
{
assert s != null;
}
如果需要检查也最好通过if s = null 抛出NullPointerException来检查
不要用assert来检查方法操作的返回值来判断方法操作的结果
例如 assert list.removeAll();这样看起来好像没有问题 但是想想如果assert 被disable呢 , 那样他就不会被执行了 所以removeAll()操作就没有被执行可以这样代替
boolean boo = list.removeAl();
assert boo;
在Java中怎么使用断言如果要开启断言检查java断言类代码 , 则需要用开关-enableassertions或-ea来开启 。
推荐阅读
- 手机虎牙直播工具条,虎牙直播工具箱怎么打开
- gis怎么做路线图,使用gis如何做路线图
- sqlserver当日,sql 当天
- python算方差函数 python中计算方差
- sap系统集成,sap与mes集成
- word怎么打出牙位符号,怎么在word里输入牙位
- jquery判断数组包含字符串,jquery判断字符串包含字符
- vb.net不在枚举中 vba 枚举类型
- 什么是国际象棋直播平台,国际象棋主播