java基础:断言assert


核心思想

{P}S{Q}表示程序的正确性断言.

S表示程序代码段,P(前置断言)和Q(后置断言)分别是S执行前后应该满足的断言。

P(前置断言)刻画了程序执行前应该满足的条件;

Q(后置断言)刻画了程序执行后应该满足的条件。

断言{P}S{Q}的含义:

如果满足P为真则S必定在有限步骤内终止,且终止时Q必定为真。

应用于计算机语言

Assertion(断言)功能在J2SE 1.4版本时引入的,是一种为方便调试而引入的语法机制(也可以说就是一种调试机制)。assertJ2SE1.4开始被作为关键字保留。

为什么需要断言

这里你可能会问:我们不是有调试方法吗(在eclipse中设置断点追踪变量),为什么需要断言来方便调试呢?

你想一下:你开发了一款产品(假设产品中代码分为 B C两段),过了一段时间后客户跟你讲有bug需要你进行维护,你发现需要修改C段的代码,但是你能确定修改了C段后不会影响B段的代码运行结果吗,按照我们以前的测试方式的话你就只有把B段也进行测试吧;好,就算要把B段按照以前的输出语句或断点和逻辑判断来从新测试,可是这些信息没有保存呀,隔了这么久了你也可能忘了,这是不是一件相当麻烦的事。而assertion(断言)就可以比较好的解决这个问题。

语法形式(两种)

assert bool_expression1;

// bool_expression1为逻辑表达式,结果只能为true;若为false,将抛出AssertionError异常。

assert  bool_expression1: expression2;

// bool_expression1结果为false抛出异常并且把expression的结果转化为String类型打印出来

运行

在运行时,我们可以选择开启assertion功能,或者不开启,另外我们还可以开启一部分类或包的assertion功能,所以运行选项变得有些复杂。

Java  -ea  Test.class      // [-ea]参数:启动断言(执行时才会去检测断言的真假)

Java  -da  Test.class             //  [-da]参数:关闭断言(执行时忽略断言语句)

 

参考:

欧阳晨和周欣写的深入解析Java的新特性assertion

华志章老师的《Java语言程序设计》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章