为什么程序没有显示任何AssertionError?

时间:2015-01-10 20:45:58

标签: java assertion

我已经执行了这样的代码:java -ea HelloWorld以及AssertionError显示的其他代码,但对于这个特定的代码,我没有得到任何AssertionError。

public class HelloWorld{

     public static void main(String []args){
         boolean b=true;
         assert(b==true);
         b=false;     
     }
}

2 个答案:

答案 0 :(得分:1)

如果您还没有弄清楚Java断言的工作原理:

断言表达式 message_if_not_true

因此,如果您的断言评估为False,则会收到错误消息。

你在做什么:

assert(b == true) 

不会导致assertionError,因为b在前一行设置为true。查看Java Oracle文档以获取断言。

答案 1 :(得分:0)

您声明b==true,它在断言执行时执行。如果断言为假,则抛出AssertionError。来自Oracle documentation:

  

每个断言都包含一个你认为会有的布尔表达式   断言执行时为true。如果不是这样,系统会   抛出一个错误。通过验证布尔表达式确实是   确实,断言证实了你对行为的假设   你的计划,增加你对程序免费的信心   错误

它可以以两种不同的方式应用:

  

断言语句有两种形式。第一个更简单的形式是:

     

assert Expression1 ;

     

其中 Expression1 boolean表达式。什么时候   系统运行断言,它评估 Expression1 ,如果是的话   false会抛出AssertionError但没有详细消息。

     

断言陈述的第二种形式是:

     

assert Expression1 Expression2 ;

     

其中:

     
      
  • Expression1 boolean表达式。
  •   
  • Expression2 是一个具有值的表达式。 (它不能是对声明为void的方法的调用。)
  •   
     

使用此版本的assert语句为AssertionError提供详细消息。系统将 Expression2 的值传递给相应的AssertionError构造函数,该构造函数使用值的字符串表示形式作为错误的详细消息。