两个断言表达式之间的区别?

时间:2014-02-01 22:19:09

标签: java assert

运行时执行的两种情况有什么区别?

private void doStuff() {
assert (y > x);
// more code assuming y is greater than x
}

private void doStuff() {
assert (y > x): "y is " + y + " x is " + x;
// more code assuming y is greater than x
}

1 个答案:

答案 0 :(得分:5)

assert语句采用以下形式

assert Expression1 : Expression2 ;

Java Language Specification

  

否则,通过根据值进行选择继续执行   Expression1

     
      
  • 如果值为true,则不执行进一步操作和断言   声明正常完成。

  •   
  • 如果值为false,则执行行为取决于是否   Expression2存在:

         
        
    • 如果存在Expression2,则会对其进行评估。

           
          
      • 如果评估由于某种原因突然完成,则断言   由于同样的原因,声明突然完成。

      •   
      • 如果评估正常完成,则为AssertionError实例   “详细信息”是表达式2的结果值。

             
            
        • 如果由于某种原因实例创建突然完成,那么   由于同样的原因,断言声明突然完成。

        •   
        • 如果实例创建正常完成,则为assert语句   通过抛出新创建的AssertionError突然完成   对象

        •   
      •   
    •   
    • 如果Expression2不存在,则AssertionError实例不存在   “详细信息”已创建。

    •   
  •