JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

java 核心技术-12版 卷Ⅰ- 7.4 使用断言

wys521 2024-11-01 15:16:02 精选教程 27 ℃ 0 评论

原文

7.4 使用断言

在一个具有自我保护能力的程序中,断言很常用。在下面的小节中,你会了解如何有效地使用断言。

7.4.1 断言的概念

假设你确信满足某个特定属性,并且代码依赖于这个属性。例如,可能需要计算

double y = Math.sqrt(x);

你确信这里的x是一个非负数。原因可能是:x是另外一个计算的结果,而这个计算的结果不可能为负;或者x是一个方法的参数,这个方法要求它的调用者只能提供一个正数输人。不过,你可能还是想再做一次检查,不希望计算中潜入让人困惑的“不是一个数”(NaN)浮点值。当然,也可以抛出一个异常:

if (x <0)

    throw new IllegalArgumentException("x < 0");

即使测试完成后,这个测试代码还一直保留在程序中。如果在程序中含有大量这种检查,程序运行起来会比应有的速度慢一些。

断言(assertion)机制允许你在测试期间在代码中插入一些检查,而在生产代码中自动删除这些检查。

Java语言有一个关键字assert。这个关键字有两种形式:

assert condition:

assert condition : expression;

这两个语句都会计算条件(condition),如果结果为 false,则抛出一个AssertionError 异常。在第二个语句中,表达式(expression)将传入 AssertionError 对象的构造器,并转换成-

个消息字符串。

注释:表达式(expression)部分的唯一目的是生成一个消息字符串。AssertionError对象并不存储具体的表达式值,因此,以后无法得到这个表达式值。正如JDK 文档所描述的那样:如果能得到表达式的值,“就会鼓励程序员尝试从断言失败恢复,这有违于断言机制的初衷”。

要想断言x是一个非负数,只需要使用下面这条语句

assert x >= 0;

或者将x的具体值传递给AssertionError 对象,以便以后显示。

assert x >=0 : x;


CC++注释: C语言中的 assert 宏将断言条件转换成一个字符串。当断言失败时,就会打印这个字待串。例如,若assert(x>=0) 失败,就会打印失败条件“x>=0”。在Java中条件并不会自动地成为错误报告中的一部分。如果希望看到这个条件,就必须将它作为字符串传递给AssertionError 对象: assert x>=0 : "x>=0"。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表