Java那点儿事6——断言

没几天,这一系列的文章已经写到6了。如果有些Java基础并且度过了前5篇的话,相信一定受益匪浅了。
这回要说的并不什么原则之类的问题了。而是粗略的讲一下在Java1.4中加入的一个新功能—断言。

断言使用关键字assert,在Java1.3时assert并不是关键字且可以为标识符,而在1.4之后是不能使用assert作为标识符的。
简单的说明一下assert的作用,假如要编写一个函数f,其中f只可以接受一个1-10的整形数据,如果数据大于10那么程序会错误。这段代码可能会是下面这个样子。
private void f(int data){
if(data>0 && data<=10){
// 某些处理工作
}else{
// 提示错误
}
}

如果说data是合法的1-10之间的整数,这个程序在调试的时候自然没有问题。如果data非法,也就是说data不是1-10中的整数,那么f这个方法是没有意义的,换句话说f这个方法只负责1-10之间的整数,他不负责其他的整数,而且他也只可能被传进1-10的整数。代码中的第2行的这个if字句是与功能无关的,这个验证只是为了读错(debug),如果调试完成,在最终发布的时候这些读错的代码应该确保删除以提高性能。这件事也会耗费大量的时间也有可能产生新的错误。而适当的使用断言就可以简化这个工作。

使用断言完成上述功能的
private void f(int data){
assert(data > 0 && data <= 10);
// 某些处理工作
}

断言是可以开启和关闭的,在开启断言之后,这段代码就会验证data是否"合法",如果不合法则会抛出AssertionError,从而停止程序的运行。而关闭断言之后,assert字句就像消失一样不会被执行也不会抛出任何东西。

语法解析: 断言有两种语法,非常简单和简单两种,其判断方式类似if、while。如果后面的逻辑表达式值为假,则抛出AssertionError。

非常简单 - 只提示假设不成立
assert (布尔表达式);
下列使用都是合法的:
assert true;
assert (x==1);


简单 - 提供更多的辅助信息
assert (布尔表达式) : 返回信息 ;
下列使用都是合法的:
assert false : "Data is Error";
assert (x>0 && x<=10) : new Object();
assert (x > y) : "x = "+x+" y = "+ y;

下列使用都是不合法的:
assert (x > y) : ;
assert false : String s = "error";


如何启动断言 在默认的状态下断言是被禁用的。在运行是需要使用命令行来启用断言。
启动 使用如下的参数运行
java -ea
java -enableassertions
禁用 使用如下的参数运行
java -da
java -disableassertions

注意抛出的AssertionError是可以被catch捕获的,但是并不推荐这样做,一旦捕获处理不当有可能会掩盖错误的发生。

关于如何合适的使用断言,Sun在断言文档里有一定的描述,下面简单说一下,具体的回头自己查一下就好了。
1. 不要使用断言验证公有方法的参数
2. 使用断言验证验证私有方法的参数
3. 不要使用断言验证命令行参数
4. 即使在公有方法内,可以使用断言检查从不会发生的情况
5. 不要使用可能产生副作用的断言表达式
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值