Java 中的 assert 关键字

Rupam Yadav 2023年10月12日
  1. 在 Java 中使用 assert 作为条件
  2. 在 Java 中使用 assert condition : expression
  3. 验证代码的不可达部分是否实际上是不可达的
  4. 在内部不变量的情况下
Java 中的 assert 关键字

在 Java 中,你可以使用 assert 关键字来启用断言。此函数用于测试我们对程序的假设。我们可以通过两种方式在 Java 中使用断言,我们将在本文中解决这些问题。

在 Java 中使用 assert 作为条件

断言是检测和纠正程序错误的最快捷、最简单的方法。断言在执行时被假定为真。否则,如果它是假的,它会抛出一个断言错误。

这里,assert 条件是一个布尔表达式。

public class JavaAssertCheck {
  public static void main(String args[]) {
    String[] names = {"John", "Mary", "David"};
    assert names.length == 2;
    System.out.println("There are " + names.length + "  names in an array");
  }
}

输出:

There are 3  names in an array

断言被禁用;因此,该程序将编译并运行而不会显示任何错误。但是如果断言被启用并且条件为假,JVM 会立即抛出一个 AssertionError 并停止程序。

Exception in thread
    "main" java.lang.AssertionError at JavaAssertCheck.main(JavaAssertCheck.java : 5)

在 Java 中使用 assert condition : expression

在这种断言格式中,如果条件被评估为假,则表达式被传递给 AssertionError 的构造函数。如果断言被启用并且如下所示的假设为假,则显示带有作为详细消息的传递表达式的 AssertionError

此消息有助于正确识别错误并修复错误。

public class JavaAssertCheck {
  public static void main(String args[]) {
    String[] names = {"John", "Mary", "David"};
    assert names.length == 2 : "The assertion condition is false.";
    System.out.println("There are " + names.length + "  names in an array");
  }
}

输出:

Exception in thread "main" java.lang.AssertionError: The assertion condition is false.
	at JavaAssertCheck.main(JavaAssertCheck.java:5)

在这里,它显示了我们可以在 Java 中使用断言概念的某些条件。

验证代码的不可达部分是否实际上是不可达的

public void unReachableCode() {
  System.out.println("Unreachable Code");
  return;
  assert true;
}

如果你在任何你认为不应到达流的位置进行假设,则此函数将在删除无法到达的语句时提示错误。

在内部不变量的情况下

在断言可用之前,许多程序员使用注释来记录他们对程序的假设。如下面的多路 if 语句所示,我们可能想写一些东西来解释我们对 else 情况的假设。

public class JavaAssertCheck {
  public static void main(String args[]) {
    int n = 37;
    if (n % 3 == 0)
      System.out.println("n % 3 == 0");
    else if (n % 3 == 1)
      System.out.println("n % 3 == 1");
    else
      assert n % 3 == 2 : "Assumption is false. " + n;
  }
}

不应该在公共方法中使用断言来检查传递的参数,因为用户可以自己提供这些参数;因此,它可能会失败并导致 AsssertionError。不要使用断言来管理你的应用程序正常工作所需的任务。一个例子是从列表中删除空元素。

通常,断言中包含的表达式应该没有副作用。

作者: Rupam Yadav
Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn