Java 断言

原文:https://www.studytonight.com/java-examples/java-assertions

Assert 是 Java 中的一个关键字,它允许我们测试一个假设。布尔表达式与 assert 关键字一起使用。

断言(assert 关键字和布尔表达式的组合)最初被认为是真的。如果断言为假,那么我们将得到AssertionError

资产错误是一个未检查的异常。我们不需要在方法中用 throws 关键字声明它。对于这个错误,我们也不需要使用 try-catch 块。

我们可以遵循以下任意一种语法来创建断言。

在第二种情况下,表达式二以AssertionError返回。它帮助我们理解错误的原因,并相应地帮助我们调试代码。

assert <Boolean-expression>;
assert <expression-1> <expression-2>;

启用和禁用断言

默认情况下,Java 中禁用断言。在早期版本的 Java 中,我们可以使用 assert 这个词来表示变量和方法名。这可能会导致不一致。但是,我们可以通过使用 -enableassertions 选项或 -ea 选项轻松启用断言。

java -enableassertions :<package-name>... :<class-name>
java -ea:<package-name>... :<class-name>

禁用它们也很简单。对此,我们可以使用-disablessers-da 选项。

java -disableassertions :<package-name>... :<class-name>
java -da:<package-name>... :<class-name>

断言示例

让我们创建一个断言语句,假设数组的长度是 5。当长度等于 5 时,我们不会得到任何 AssertionError。

public class Demo
{
    public static void main(String args[])
    {
        int[] arrOfLengthTwo = {6, 8, 2, 1, 1};
        assert arrOfLengthTwo.length == 5;
        System.out.print("Array Length is: " + arrOfLengthTwo.length);
    }
}

数组长度为:5

让我们改变数组长度并运行代码。在这种情况下,我们应该得到一个 assessority error。

public class Demo
{
    public static void main(String args[])
    {
        int[] arrOfLengthTwo = {2, 1, 1};
        assert arrOfLengthTwo.length == 5;
        System.out.print("Array Length is: " + arrOfLengthTwo.length);
    }
}

在 Demo.main(Demo.java:6)的线程“main”中出现异常

让我们也添加一条消息,如果抛出错误,将显示这条消息。

public class Demo
{
    public static void main(String args[])
    {
        int[] arrOfLengthTwo = {2, 1, 1};
        assert arrOfLengthTwo.length == 5 : "Array Length is Not 5";
        System.out.print("Array Length is:" + arrOfLengthTwo.length);
    }
}

线程“main”Java . lang . assertionerror:在 Demo.main(Demo.java:6)处数组长度不是 5

什么时候在 Java 中使用断言?

断言用于代码中不可到达的部分。这确保了如果程序试图执行不可到达的代码,那么就会抛出一个 AssertionError。

public static void main(String[] args)
{
    while(true)
    {
        System.out.println("Reachable part of the code");
    }

    //Unreachable
    assert false;
}

断言还用于使 switch 语句的默认情况不可达。

public static void main(String[] args)
{
    int booleanInt = 0;
    switch (booleanInt) {
        case 0:
            System.out.println("False");
            break;
        case 1:
            System.out.println("True");
            break;
        default:
            assert false : "boolean integer can only be 0 or 1"; 
    }
}

我们还可以使用断言来暗示潜在的假设,或者确保注释提供正确的信息。

public static void main(String[] args)
{
    int num = 10;
    if(num > 0)//Positive number
        System.out.print("Positive");

    else//Negative number
    {
        assert num < 0 : "Number is zero";
        System.out.print("Negative");
    }
}

何时不使用断言?

  • 断言被用在许多不同的地方。然而,我们应该避免使用它们来检查公共方法的输入。如果我们在这种情况下得到一个 AssertionError,那么就很难确定实际的错误。
  • 我们也不应该在断言中调用方法。相反,我们可以使用一个临时变量来存储结果,并在断言中使用这个变量。这样做是为了确保操作的执行与断言是否被启用无关。

摘要

断言是检测错误和调试代码的好方法。它们主要用于软件的测试阶段。断言也使我们的代码更易读。Java 中禁用了断言,但是我们可以轻松地启用它们。在本教程中,我们学习了如何在 Java 中使用断言。