Java 之 assert (断言)
本文内容纲要:
我们知道C/C++语言中有断言的功能(assert)。在JavaSE1.4版本以后也增加了断言的特性。
断言是为了方便调试程序,并不是发布程序的组成部分。理解这一点是很关键的。
默认情况下,JVM是关闭断言的。因此如果想使用断言调试程序,需要手动打开断言功能。在命令行模式下运行Java程序时可增加参数-enableassertions或者-ea打开断言。可通过-disableassertions或者-da关闭断言(默认情况,可有可无)。
断言的使用:
断言是通过关键字assert来定义的,一般的,它有两种形式。
-
assert
;比如booleanisStudent=false;assertisStudent; -
assert
: ;比如booleanisSafe=false;assertisSafe:"NotSafeatall";
光说无用,举几个简单的例子:
第一种形式:
publicclassAssertionTest{
publicstaticvoidmain(String[]args){
booleanisSafe=false;
assertisSafe;
System.out.println("断言通过!");
}
}
如果是在命令行模式下运行,需要指明开启断言功能。如
java-eaAssertionTest
如果是在IDE下,比如Eclipse,可这样设置:Runas->RunConfigurations->Arguments->VMarguments:敲入-ea即可。
输出结果:
Exceptioninthread"main"java.lang.AssertionError
atAssertionTest.main(AssertionTest.java:8)
第二种形式:
publicclassAssertionTest{
publicstaticvoidmain(String[]args){
booleanisSafe=false;
assertisSafe:"Notsafeatall";
System.out.println("断言通过!");
}
}
输出结果:
Exceptioninthread"main"java.lang.AssertionError:Notsafeatall
atAssertionTest.main(AssertionTest.java:7)
第二种形式和第一种的区别在于后者可以指定错误信息。
陷阱:
断言只是为了用来调试程序,切勿将断言写入业务逻辑中。比如考虑下面这个简单的例子:
publicclassAssertionTest{
publicstaticvoidmain(String[]args){
assert(args.length>0);
System.out.println(args[1]);
}
}
该句assert(args.length>0)和if(args.length>0)意思相近,但是如果在发布程序的时候(一般都不会开启断言),所以该句会被忽视,因此会导致以下
Exceptioninthread"main"java.lang.ArrayIndexOutOfBoundsException:1
atAssertionTest.main(AssertionTest.java:7)
更好的替代品:
JUnit。
本文内容总结:
原文链接:https://www.cnblogs.com/jpfss/p/10026877.html