Java assert 关键字用于在 Java 中创建断言,这使我们能够测试有关我们程序的假设。
例如,断言可能是为了确保员工的年龄是正数。
每个断言都包含一个布尔表达式,我们认为该表达式在断言执行时将为“真”。
如果不正确,系统将抛出错误。
https://onitroad.com 更多教程
Java断言示例
assert
可以帮助支持按合同设计风格的编程。
它可用于验证前置条件、后置条件和其他一般断言。
例如
import com.onitroad.Employee; public class Main { public static void main(String[] args) { Employee e = new Employee(1, "Jamez", "gupta"); //Passes successfully assert e.getFirstName().length() < 20 : e.getFirstName().length(); //Failed assert e.getLastName().length() < 5 : e.getLastName().length(); } }
输出:
Exception in thread "main" java.lang.AssertionError: 5 at com.onitroad.Main.main(Main.java:15)
在上面的示例中,查看断言错误消息。
它打印“5”,这表明哪个参数值被测试和失败。
Java断言语法
断言语句将具有以下两种形式之一:
assert expression1; //or assert expression1 : expression2 ;
其中:
- expression1 是一个布尔表达式。
- expression2 是一个具有值的表达式,该值将与 expression1 进行比较。
只有当程序具有一些可能有助于诊断故障的添加信息时,才应优先使用断言语句的第二种形式。
像所有未捕获的异常一样,断言失败通常在堆栈跟踪中标记为抛出它们的文件和行号。
Java 启用和禁用断言
有时断言可能会增加程序的执行开销。
为确保断言不是已部署应用程序中的性能负担,可以在程序启动时启用或者禁用断言,默认情况下禁用断言。
一旦禁用,它们在语义和性能上基本上等同于空语句。
- 要以各种粒度启用断言,请使用
-enableassertions
或者-ea
开关。 - 要以各种粒度禁用断言,请使用
-disableassertions
或者-da
开关。
粒度可以定义如下:
- no arguments
在除系统类之外的所有类中启用或者禁用断言。
java -ea Main
上面的命令将运行 Main.class
,并在所有类上启用断言。
- packageName...
启用或者禁用命名包和任何子包中的断言。
java -ea:com.onitroad.dao... Main
上面的命令将运行 Main.class
,断言仅在包 com.onitroad.dao
中启用。
- ...
启用或者禁用当前工作目录中未命名包中的断言。
java -da:... Main
上面的命令将运行 Main.class 并在当前工作目录中存在的所有类上禁用断言,其中存在 Main.class 。
- className
仅在命名类中启用或者禁用断言。
java -ea:com.onitroad.dao... -da:com.onitroad.dao.RolesDao Main
上面的命令将运行 Main.class
,并在 com.onitroad.dao
包中启用断言;但不在类 com.onitroad.dao.RolesDao
中。
日期:2020-09-17 00:09:58 来源:oir作者:oir