网站首页 > 精选教程 正文
原文
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"。
猜你喜欢
- 2024-11-01 关于启动电容器的匹配 启动电容器怎么接线
- 2024-11-01 冷水机的基本运行参数包括哪些? 冷水机参数含义
- 2024-11-01 Java线程池解读:从入门到精通,核心参数全掌握!
- 2024-11-01 使用Java编写求和的代码 使用java编写求和的代码是什么
- 2024-11-01 稳压器启动电流多大? 稳压器输出多少正常
- 2024-11-01 Java容器化参数配置最佳实践 java容器有哪几种
- 2024-11-01 Java变量 java变量的数据类型分为两种
- 2024-11-01 深入理解JVM运行原理:从内存布局到执行流程的全面解析
- 2024-11-01 丹佛斯VLT2900变频器维修后试运行参数设置方法及教...
- 2024-11-01 Java 21:有什么新变化? java+21:有什么新变化?举例说明
你 发表评论:
欢迎- 04-11Java面试“字符串三兄弟”String、StringBuilder、StringBuffer
- 04-11Java中你知道几种从字符串中找指定的字符的数量
- 04-11探秘Java面试中问的最多的String、StringBuffer、StringBuilder
- 04-11Python字符串详解与示例(python字符串的常见操作)
- 04-11java正则-取出指定字符串之间的内容
- 04-11String s1 = new String("abc");这句话创建了几个字符串对象?
- 04-11java判断字符串中是否包含某个字符
- 04-11关于java开发中正确的发牌逻辑编写规范
- 最近发表
-
- Java面试“字符串三兄弟”String、StringBuilder、StringBuffer
- Java中你知道几种从字符串中找指定的字符的数量
- 探秘Java面试中问的最多的String、StringBuffer、StringBuilder
- Python字符串详解与示例(python字符串的常见操作)
- java正则-取出指定字符串之间的内容
- String s1 = new String("abc");这句话创建了几个字符串对象?
- java判断字符串中是否包含某个字符
- 关于java开发中正确的发牌逻辑编写规范
- windows、linux如何后台运行jar(并且显示进程名)
- 腾讯大佬私人收藏,GitHub上最受欢迎的100个JAVA库,值得学习
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)