Java断言问题

Java断言问题,java,Java,当Java断言失败时会发生什么?程序员是如何知道断言失败的 谢谢。它会抛出一个错误。这就像得到一个NullPointerException,但它是java.lang.Error的子类。名称为AssertionError 它就像一个NullPointerException,在这个意义上,您不必声明抛出或任何东西,它只是抛出它 assert(false); 就像 throw new AssertionError(); 如果使用传递给java程序(VM)的-ea标志运行程序。如果在JVM中启用了断

当Java断言失败时会发生什么?程序员是如何知道断言失败的


谢谢。

它会抛出一个
错误。这就像得到一个
NullPointerException
,但它是
java.lang.Error
的子类。名称为
AssertionError

它就像一个
NullPointerException
,在这个意义上,您不必声明抛出或任何东西,它只是抛出它

assert(false);
就像

throw new AssertionError();

如果使用传递给java程序(VM)的
-ea
标志运行程序。

如果在JVM中启用了断言(通过
-ea
标志),则断言失败时将抛出
AssertionError


这个不应该被捕获,因为如果断言失败,它基本上意味着你关于程序如何工作的一个假设是错误的。因此,当线程(可能还有整个程序)终止时记录异常堆栈跟踪时,您通常会发现断言失败。

如果断言失败,并且在运行时启用了断言,它将抛出一个错误。
通常在JUnit测试中使用assert语句,在构建应用程序时,您运行的测试实用程序将检查错误并告诉您


看看这个:

断言只有在启动时在JVM中启用了断言,才会失败。您可以通过在命令行中指定参数-ea来实现这一点。如果执行此操作,则此代码块在执行时将抛出一个
AssertionError

public void whatever() {
   assert false;
}

断言只能用于检测编程错误。如果您正在验证这些行上的用户输入或其他内容,请不要使用断言。

它会抛出断言错误。但是,您必须使用-ea或-enableassertions标志编译程序,使其生成实际异常

它抛出一个
断言错误
,它是
错误
的子类。一般来说,作为一个
错误,特别是作为一个失败的断言,您可能不应该尝试捕捉它,因为它告诉您代码中有一个明显的异常,如果继续,您可能会遇到一些未定义的错误,不安全状态。

程序员可以编写try-catch块,这样,如果发生错误,就可以在catch中捕获它,程序员可以知道

try
{
  assert false;
}
catch(Exception e)
{
  System.out.println("Error has occured");
}

不是编译时选项。JUnit断言不同于普通Java断言。它们导致抛出不同的异常(
AssertionFailedError
),并且不能使用JVM标志关闭。Java断言的形式为“assert boolean expression”或“assert boolean expression:non void expression”,启用时由运行时系统检查。在JUnit测试中,“assertEquals(a,b)”之类的语句是JUnit类的方法调用。