关于JDK1.4增加的assert语句

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

关于JDK1.4增加的assert语句

1. assert语句的语法

JDK1.4增加了assert语句,它的语法如下:

assert assumption 或者

assert assumption : error message or error code

assumption 应该是一个布尔值。(或者是条件表达式,反正最终的结果为true或false 。)

如果assumption为true,那么一切如常,这个语句就像没有出现一样,如果assumption为false,那么程序将扔出一个java.lang.AssertionError 。如果在代码里采用了第二种带error message或者error code的写法的话,该error message或者error code将跟随java.lang.AssertionError一起显示出来。

2. 带assert语句的代码的编译

如果你在代码中使用了assert语句,那么你使用javac编译时应该像这样:

javac –source 1.4 **.java

否则的话,assert关键字将不被视为关键字。(这是因为assert语句是从JDK1.4

才有的。)

当然,如果你使用JDK1.4及以上编译时,不用-source 1.4参数的话会出现warning 。

3. 运行时启动assert 。

缺省情况下assert是不被启用的。

运行时应该这样启用assert:

java –ea:类名 类名

或者

java –ea:包名… 类名

相应的用-da关闭assert 。

(详细可以参考java命令的帮组)。

4. assert的好处及使用。

我以为assert主要用来debug 。使用它能很容易定位错误。另外,在代码的适当地方用上assert语句,能够在代码中某些值的取值范围发生变化时迅速的定位代码错误,发现代码的bug 。请看下面这个例子。

假设i现在的取值就是0 和 1 。

那么我们可以这么写代码:

if (0 == i) {

….

} else { //i == 1

}

当i的值的范围发生了变化(这是完全有可能的,因为这个i的值可能是其它模块给本模块传的参数。),这个代码就很有可能有潜在的bug,而且这个bug未必能立即表现出来。即使表现出来了,要定位到这个错也不容易。因为你很可能仍然坚信i的值就是0或者1。

但是如果将以上代码改写成这样:

if (0 == i) {

….

} else { //i == 1

assert i==1:”The i value isn’t 0 or 1 .”

….

}

那么一旦i的取值范围超过了0,1 ,那么立即会扔出一个带有错误信息的java.lang.AssertionError 。这样对错误的定位就一目了然了。

5. 最后写一个运行的例子:

public class TestAssert {

public static void main(String[] args) throws Exception {

int i=100;

String errorMsg = "This is a error";

int errorCode = 10000;

assert i>200:errorCode;

assert i>200:errorMsg;

}

}

然后编译:

javac –source 1.4 TestAssert.java

然后运行:

java –ea:TestAssert TestAssert

运行结果如下:

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航