Java assert 关键字

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