没几天,这一系列的文章已经写到6了。如果有些Java基础并且度过了前5篇的话,相信一定受益匪浅了。
这回要说的并不什么原则之类的问题了。而是粗略的讲一下在Java1.4中加入的一个新功能—断言。
断言使用关键字assert,在Java1.3时assert并不是关键字且可以为标识符,而在1.4之后是不能使用assert作为标识符的。
简单的说明一下assert的作用,假如要编写一个函数f,其中f只可以接受一个1-10的整形数据,如果数据大于10那么程序会错误。这段代码可能会是下面这个样子。
如果说data是合法的1-10之间的整数,这个程序在调试的时候自然没有问题。如果data非法,也就是说data不是1-10中的整数,那么f这个方法是没有意义的,换句话说f这个方法只负责1-10之间的整数,他不负责其他的整数,而且他也只可能被传进1-10的整数。代码中的第2行的这个if字句是与功能无关的,这个验证只是为了读错(debug),如果调试完成,在最终发布的时候这些读错的代码应该确保删除以提高性能。这件事也会耗费大量的时间也有可能产生新的错误。而适当的使用断言就可以简化这个工作。
使用断言完成上述功能的
断言是可以开启和关闭的,在开启断言之后,这段代码就会验证data是否"合法",如果不合法则会抛出AssertionError,从而停止程序的运行。而关闭断言之后,assert字句就像消失一样不会被执行也不会抛出任何东西。
语法解析: 断言有两种语法,非常简单和简单两种,其判断方式类似if、while。如果后面的逻辑表达式值为假,则抛出AssertionError。
非常简单 - 只提示假设不成立
assert (布尔表达式);
下列使用都是合法的:
简单 - 提供更多的辅助信息
assert (布尔表达式) : 返回信息 ;
下列使用都是合法的:
下列使用都是不合法的:
如何启动断言 在默认的状态下断言是被禁用的。在运行是需要使用命令行来启用断言。
启动 使用如下的参数运行
java -ea
java -enableassertions
禁用 使用如下的参数运行
java -da
java -disableassertions
注意抛出的AssertionError是可以被catch捕获的,但是并不推荐这样做,一旦捕获处理不当有可能会掩盖错误的发生。
关于如何合适的使用断言,Sun在断言文档里有一定的描述,下面简单说一下,具体的回头自己查一下就好了。
1. 不要使用断言验证公有方法的参数
2. 使用断言验证验证私有方法的参数
3. 不要使用断言验证命令行参数
4. 即使在公有方法内,可以使用断言检查从不会发生的情况
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. 不要使用可能产生副作用的断言表达式