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 中使用断言。