断言
在网上找了很多关于断言的博客知识点总结,加上java核心技术书籍上内容,整理出这篇学习博客
这篇博客讲的很详细,见http://blog.csdn.net/silentbalanceyh/article/details/4564884内容
1、断言的概念
断言机制允许在测试期间向代码中插入一些检査语句 。 当代码发布时, 这些插人的检测语句将会被自动地移走。
assertion(断言)是Java1.4引入的一个新特性,该特性的引入的目的是为了辅助开发人员调试和测试,是一种比较常用的调试、测试方案。
assertion在软件开发过程中是一种比较常用的调试方法;不仅仅如此,使用assertion可以在开发过程中证明程序的正确性,只是这种用法会对系统的整体设计存在很大的挑战
,而且目前很少投入到实用里面,所以一般情况下使用assertion的目的是为了调试和测试。
Java 语言引人了关键字 assert 。
这个关键字有两种形式 :
assert 条件 ;
assert 条件 : 表达式 ;
这两种形式都会对条件进行检测 , 如果结果为 false , 则抛出一个 AssertionError 异常。
·在第二种形式中, 表达式将被传人 AssertionError 的构造器 , 并转换成一个消息字符串。
示例:
1 /** 2 *断言使用的概念说明代码 3 **/ 4 public class AssertionDriver { 5 public static void main(String args[]){ 6 Employee employee = new Employee(); 7 employee.setName("Tian lang"); 8 employee.setEmail("[email protected]"); 9 businessProcess(employee); 10 } 11 12 public static void businessProcess(Employee employee){ 13 try{ 14 assert employee.getName() != null && 15 employee.getEmail() != null && 16 employee.getPassword() != null: 17 employee; 18 }catch(AssertionError error){ 19 System.out.println(error); 20 } 21 } 22 } 23 24 class Employee{ 25 private String name; 26 private String email; 27 private String password; 28 public String getName() { 29 return name; 30 } 31 public void setName(String name) { 32 this.name = name; 33 } 34 public String getEmail() { 35 return email; 36 } 37 public void setEmail(String email) { 38 this.email = email; 39 } 40 public String getPassword() { 41 return password; 42 } 43 public void setPassword(String password) { 44 this.password = password; 45 } 46 @Override 47 public String toString(){ 48 return "/nName:" + name + "/n" + "Email:" + email + "/n" + "Password:" + password; 49 } 50 }
上边代码段使用了第二种表达式的方式,但是这里复杂的地方在于表达式2不是一个字符串,而是定义的Employee类的一个对象的实例,也就是说这里表达式2是一个Object实例,然后编译该代码,运行的时候打开断言,就可以得到下边的输出:
java.lang.AssertionError: Name:Tian lang Email:2433758932@qq.com Password:null
2、在eclipse中如何使用断言
(一)首先明确:
java断言Assert是jdk1.4引入的。
jvm 断言默认是关闭的。
断言只适用于复杂的调试过程。
断言一般用于程序执行结果的判断,千万不要让断言处理业务流程。
(二)判断eclipse是否开启了断言,
代码如下:
1 public class AssertTest { 2 3 public static void main(String[] args) { 4 boolean isOpen = false; 5 assert isOpen=true; //如果开启了断言,会将isOpen的值改为true 6 System.out.println(isOpen);//打印是否开启了断言 7 } 8 }
执行上面代码,如果打印 true说明已经启用了断言,如果为 false 则没有启用断言。
如果没有启用断言,则按按照下面方法开启断言。
(三)eclipse中开启断言选择菜单:
Run ---> Run Configurations...---> 选择 Arguments 选项卡
在 VM arguments 文本框中输入: -ea 注意:中间没有空格,如果输入 -da 表示禁止断言。
然后关闭该窗口,然后保存就开启了断言。
3、关于断言的思考
Java断言机制的出现,其主要目的是为了辅助程序员开发中的调试、测试、开发等操作,既然如此,在正规的业务流程中不能滥用,用不好有可能导致很严重的问题,有三点需要说明:
【1】请开发人员牢记,断言默认是关闭的,所有主流的IDE包括Eclipse和NetBeans在调试代码过程都没有将断言打开,如果要打开断言,需要进行相关的设置,所以有时候
加入了assert在代码里面了过后,在寻找系统关键环节的时候,必须记得打开断言功能。
【2】不可以使用断言去替代正常的业务逻辑:这种情况对比地说就是assert和if语句,这两者在程序开发过程中有着本质性的概念差异。if最典型的解释就是,条件满足就执行,
条件不满足就不用执行;而assert一般放在系统的关键位置,assert是确保条件表达式是正确的,如果不正确表示系统有Error,所以二者在概念上有本质的差别,所以开发人员必
须记得不能使用assert去替代本来的if语句。而且有一点,在发布最终代码版本的时候,断言一般会关闭的,如果使用了这样的替代方式,就意味着未发布版本和发布版本的流程
不一样使得在工业生产中。
【3】assert的出现,意味着如果系统在此处出现AssertionError的话证明系统已经出现了不可恢复的错误,所以assert是不能用于正规的业务逻辑的,只能用于开发和调试,这种不可
恢复错误在工业生产和工程项目里面有可能导致严重的问题,所以这种情况一定要仔细考虑assert的使用和位置。
补充,具体断言可以查看开头目录中的博客,更为详细具体!