断言的概念

  断言用于证明和测试程序的假设,比如“这里的值大于5”。

  断言可以在运行时从代码中完全删除,所以对代码的运行速度没有影响。

  断言的使用

  断言有两种方法:

  一种是assert<<布尔表达式>>;

  另一种是assert<<布尔表达式>>:<<细节描述>>。

  如果布尔表达式的值为false,将抛出AssertionError异常;细节描述是AssertionError异常的描述文本使用javac–source 1.4 MyClass.java的方式进行编译示例如下:

  public class AssertExample{

  public static void main(String[]args){

  int x=10;

  if(args.length>0){

  try{

  x=Integer.parseInt(args[0]);

  }catch(NumberFormatException nfe){

  /Ignore/

  }

  }

  System.out.println("Testing assertion that x==10");

  assert x==10:"Our assertion failed";

  System.out.println("Test passed");

  }

  }

  由于引入了一个新的关键字,所以在编译的时候就需要增加额外的参数,要编译成功,必须使用JDK1.4的javac并加上参数'-source 1.4',例如可以使用以下的命令编译上面的代码:

  javac-source 1.4 AssertExample.java

  以上程序运行使用断言功能也需要使用额外的参数(并且需要一个数字的命令行参数),例如:

  java-ea AssertExample 1

  程序的输出为:

  Testing assertion that x==10

  Exception in thread"main"java.lang.AssertionError:Our assertion failed

  at AssertExample.main(AssertExample.java:20)

  由于输入的参数不等于10,因此断言功能使得程序运行时抛出断言错误,注意是错误,这意味着程序发生严重错误并且将强制退出。断言使用boolean值,如果其值不为true则抛出AssertionError并终止程序的运行。

  断言推荐使用方法

  用于验证方法中的内部逻辑,包括:

  内在不变式

  控制流程不变式

  后置条件和类不变式

  注意:不推荐用于公有方法内的前置条件的检查。

  运行时屏蔽断言

  运行时要屏蔽断言,可以用如下方法:

  java–disableassertions或java–da类名

  运行时要允许断言,可以用如下方法:

  java–enableassertions或java–ea类名

  更多技术教程,请关注技术教程网m.jishujc.com