断言简介:
断言是用来检查不定式的,即永远都是true的情况,如果发现断言是false的,那么就会抛出异常,如果我们的的代码假设某事物为true,那么添加一个测试它的断言,可以为我们提供一种在程序中的错误引发奇怪的后果之后捕获它们的途径。失败的断言抛出Error而不是Exception。断言应该用来测试一些从不会发生的情况。断言机制允许在测试期间向代码中插入一些检査语句。当代码发布时,这些插人的检测
语句将会被自动地移走。
Java 语言为断言引人了关键字 assert。这个关键字有两种形式:
assert 条件;
和
assert 条件:表达式;
这两种形式都会对条件进行检测, 如果结果为 false, 则抛出一个 AssertionError 异常。
在第二种形式中,表达式将被传人 AssertionError 的构造器, 并转换成一个消息字符串。
控制断言计算开关有两种形式:
(1)将命令行选型传递给虚拟机
在默认情况下,断言被禁用。可以在运行程序时用 -enableassertions 或 -ea 选项启用:
java -enableassertions MyApp
java -ea MyApp
也可将MyApp换成类名或包名
也可以用选项 -disableassertions 或 -da 禁用某个特定类和包的断言:
java -ea:... -da:MyClass MyApp
启用或禁用断言是类加载器( class loader) 的功能。然而, 启用和禁用所有断言的 -ea 和 -da 开关不能应用到那些没有类加载器的“系统类”上。对于这些系统类来说, 需要使用 -enablesystemassertions/-esa 开关启用断言。
(2)使用类加载器提供的方法
虽然这种方式很少用到,但是如果我们在编写控制运行其他代码的程序,并且必须为用户提供管理断言的各种选项,那么我们就很可能需要用到这种方式,这样的操作可以通过ClassLoader上的下列方法来完成:
这些设置只会作用于将来要加载并初始化的类,一旦某个类被加载,我们就不能改变其断言状态了,更具体地讲,断言状态在类初始化时就建立好了:在其超类初始化之后,但是在执行任何静态初始化器之前。
loader是将要使用的类加载器。
在 Java 语言中, 给出了 3 种处理系统错误的机制:
•抛出一个异常
•日志
•使用断言
什么时候应该选择使用断言呢? 请记住下面几点:
•断言失败是致命的、 不可恢复的错误。
•断言检查只用于开发和测阶段
断言只应该用于在测试阶段确定程序内部的错误位置。