1)public class Test{
  public static void main(String []args){
     int x=0;
     assert(x>0):"assertion failed";
     System.out.println("finished");
  }
}为什么答案是输出 finished  ????  
2)
public class Test{
  public static void main(String []args){
     int x=0;
     assert(x>0):"assertion failed":"assertion passed";
     System.out.println("Finished");
  }
}答案为什么是Compilation fails.  ?????

解决方案 »

  1.   

    assert即断言机制,主要用于调试,在C++等编程语言里都有很广泛的应用。 
    在Java中,从J2SE1.4开始引入此关键字 assert expression1; 
    assert expression1: expression2; 
    在运行时,如果关闭了assertion功能,这些语句将不起任何作用。如果打开了assertion功能,那么expression1的值将被计算,如果它的值为false,该语句强抛出一个AssertionError对象。如果assertion语句包括expression2参数,程序将计算出expression2的结果,然后将这个结果作为AssertionError的构造函数的参数,来创建AssertionError对象,并抛出该对象;如果expression1值为true,expression2将不被计算。 一种特殊情况是,如果在计算表达式时,表达式本身抛出Exception,那么assert将停止运行,而抛出这个Exception。
      

  2.   

    2)
    public class Test{
      public static void main(String []args){
         int x=0;
         assert(x>0):"assertion failed":"assertion passed";
         System.out.println("Finished");
      }
    }
    中assert(x>0):"assertion failed":"assertion passed";和
    assert expression1; 
    assert expression1: expression2; 
    都对不上,所以出错
      

  3.   

    谢谢楼上,第二题明白了。但第一题:public class Test{
      public static void main(String []args){
         int x=0;
         assert(x>0):"assertion failed";
         System.out.println("finished");
      }
    }明明x不大于0  应该抛出断言异常,但最后怎么会输出finished。请大家帮忙看看。
      

  4.   

    好像用assert时需要在命令中加一些参数,不能只是javac, java。不知道你怎么运行得,如果不是就去baidu一下,把命令的参数加上再试验一下
      

  5.   

    By default, assertions are disabled.You could use below parameter to turn on assertions:Sample:    java -enableassertions Test
    or  java -ea Test
      

  6.   

    javac -source 1.4 *.java
    用这个试试