阅读775 返回首页    go 阿里云 go 技术社区[云栖]


《数据结构与抽象:Java语言描述(原书第4版)》一P.2.3 断言

本节书摘来华章计算机《数据结构与抽象:Java语言描述(原书第4版)》一书中的第1章 ,第1节,[美]弗兰克M.卡拉诺(Frank M. Carrano) 蒂莫西M.亨利(Timothy M. Henry) 着 罗得岛大学  新英格兰理工学院 辛运帏 饶一梅 译 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

P.2.3 断言

断言(assertion)是一个关于程序逻辑的某些方法的事实的语句。可以将它看作值为真的布尔表达式,或者至少在某些点应该为真。例如,前置条件和后置条件是方法开始前及结束后关于条件的断言。如果有一个断言为假,则程序一定有错。
可以将断言作为注释放在代码中。例如,如果在方法定义的某些地方,你知道变量sum应该是正的,则可以写如下的注释:

这样的注释用来说明并不太明晰的某些逻辑。另外,断言为你指明调试期间需要精确检查的代码位置。
自测题4 假定你有一个正整数数组。下列语句查找数组中的最大整数。在下列循环中if语句之后,应该写一个什么样的断言来当作注释?
image

断言语句(assert statement)。Java不仅能让你写注释当断言,还能使用assert语句强制执行断言,如
image

如果保留字assert后面的布尔表达式为真,则语句什么也不做。如果它为假,则发生断言错误(assertion error),程序中断执行。显示如下的错误信息:
image

你可以在assert语句后添加第二个表达式来进一步说明这条错误信息。第二个表达式必须表示一个值,而在错误信息中它是作为字符串显示的。例如,语句
image

当sum≤0时在错误信息中添加了sum的值。比如,错误信息可能是
image

默认情况下,在程序执行时禁用assert语句。所以,程序完成后可以将assert语句留在程序中,而不会浪费运行时间。当执行程序时,如果想让assert语句执行,就必须要启用assert语句。如何启用它们依赖于编程环境。

注:程序中的断言明示必须为真的逻辑。在Java中,可以使用一条assert语句写一个断言。它的格式如下:
image

如果第一个表达式为假,则可选的第二个表达式的值将出现在错误信息中。

程序设计技巧:使用assert语句是发现程序逻辑错误的简单有效的方法。除了可用于这个目的之外,留在程序中的断言还能向修改或扩展程序的人阐明你的逻辑。记住,Java会忽略assert语句,除非程序使用者指定了其他的选项。
程序设计技巧:调试时使用assert语句,能使方法强制满足前置条件。但是,assert语句不能替代if语句。应该将assert语句作为程序设计的辅助手段,而不是程序逻辑的一部分。

最后更新:2017-06-26 14:32:01

  上一篇:go  《数据结构与抽象:Java语言描述(原书第4版)》一P.3 Java接口
  下一篇:go  《数据结构与抽象:Java语言描述(原书第4版)》一P.2.2 前置条件和后置条件