一、assert的开启和关闭
因为JVM默认是不启动assert的。因此,你可以使用标记–enableassertions(缩写-ea)来开启断言功能。同样,你也可以使用标记–disableassertions(缩写-da)来关闭断言功能。例:
java -enableassertionsAssertTest
二、assert的使用
在语法上,为了支持assertion,Java增加了一个关键字assert。它包括两种表达式,分别如下:
assert expression1;
assert expression1: expression2;
在两种表达式中,expression1表示一个boolean表达式,expression2表示一个基本类型或者是一个对象(Object) ,基本类型包括boolean,char,double,float,int和long。由于所有类都为Object的子类,因此这个参数可以用于所有对象。
1、assert
如果为true,则程序继续执行。
如果为false,则程序抛出AssertionError,并终止执行。
2、assert :
如果为true,则程序继续执行。
如果为false,则程序抛出java.lang.AssertionError,并输出。
1.assert true/false;当为false时,抛出错误,结束程序
2.assert true/false : "error info";当为false时,抛出错误,结束程序,并输出提示信息"error info"
语义含义
在运行时,如果关闭了assertion功能,这些语句将不起任何作用。如果打开了assertion功能,那么expression1的值将被计算,如果它的值为false,该语句强抛出一个AssertionError对象。如果assertion语句包括expression2参数,程序将计算出expression2的结果,然后将这个结果作为AssertionError的构造函数的参数,来创建AssertionError对象,并抛出该对象;如果expression1值为true,expression2将不被计算。
一种特殊情况是,如果在计算表达式时,表达式本身抛出Exception,那么assert将停止运行,而抛出这个Exception。
三、兼容
JDK 1.4的默认编译模式并不支持断言,因此它的编译需要:
javac -source 1.4 Assert.java
Java代码
publicclassAssertTest {
publicstaticvoidmain(String[] args) {
System.out.println("----start---");
intvalue=-1;
assert0
System.out.println("----end----");
}
}
输出:
D:\java\editplus>javac -d . AssertTest.java
D:\java\editplus>java -enableassertions AssertTest
----start---
Exception in thread "main" java.lang.AssertionError: value=-1
at AssertTest.main(AssertTest.java:8)
D:\java\editplus>