1.断言概述
断言机制允许在测试期间向代码中插入一些检查语句,当代码发布时,这些插入的检测语句就会被自动地移走。assertion(断言)是Java1.4引入的一个新特性,该特性的引入的目的是为了辅助开发人员调试和测试,是一种比较常用的调试、测试方案。由于其会对程序的整体设计产生很大影响,目前很少投入到使用中,一般情况下使用的目的是为了调试和测试。
断言表示为一些布尔表达式,程序员相信在程序中的某个特定点该表达式为真。
2.常见的断言特性
前置条件断言:代码执行之前必须具备的特性
后置条件断言:代码执行之后必须具备的特性
前后不变断言:代码执行前后不能变化的特性
3.断言使用格式
断言可以有两种形式:
1.assert 布尔表达式
2.assert 布尔表达式:消息
使用第一种格式,当布尔类型表达式为false时,抛出AssertionError异常;如果是第二种格式,则输出错误消息。
我们来看一个示例:
package Assert;
public class AssertionDriver {
public static void main(String args[]){
Employee employee = new Employee();
employee.setName("Tian lang");
employee.setEmail("2433758932@qq.com");
businessProcess(employee);
}
public static void businessProcess(Employee employee){
try{
assert employee.getName() != null &&
employee.getEmail() != null &&
employee.getPassword() != null:
employee;
}catch(AssertionError error){
System.out.println(error);
}
}
}
class Employee{
private String name;
private String email;
private String password;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString(){
return "/nName:" + name + "/n" + "Email:" + email + "/n" + "Password:" + password;
}
}
输出:
java.lang.AssertionError:
Name:Tian lang
Email:2433758932@qq.com
Password:null
4.关于断言的思考
Java断言机制的出现,其主要目的时为了辅助程序员开发中的调试、测试、开发等操作,既然如此,在正规的业务流程中不能乱用,用不好可能会导致及其严重的问题。有三点需要说明:
1.默认断言是关闭的
2.不可以使用断言去代替正常的业务逻辑,这种情况一般对比的是assert和if语句,这两者在程序开发的过程中有着本质性的概念差异。if最典型的解释就是,条件满足就执行,条件不满足就不用执行;而assert一般放在系统的关键位置,assert是确保条件表达式是正确的,如果不正确表示系统有Error,所以二者在概念上有本质的差别,所以开发人员必须记得不能使用assert去替代本来的if语句。而且有一点,在发布最终代码版本的时候,断言一般会关闭的,如果使用了这样的替代方式,就意味着未发布版本和发布版本的流程不一样,使得在工业生产中产生极大的隐患。
3.assert的出现,意味着如果系统在此处出现AssertionError的话证明系统已经出现了不可恢复的错误,所以assert是不能用于正规的业务逻辑的,只能用于开发和调试,这种不可恢复错误在工业生产和工程项目里面有可能导致严重的问题,所以这种情况一定要仔细考虑assert的使用和位置。