您的位置:首页 > 编程语言 > Java开发

Java中的assert使用

2009-05-28 16:11 239 查看
1、assertion(断言)是jdk1.4才开始支持的新功能,主要在开发和测试时开启,为保证性能,在正式发布后通常是关闭。

2、Java中assertion与C中的assertion的区别在于:

1)Java中是使用assert关键字去实现其功能,而C中是使用的类库函数;

2)C中的assertion是在编译时开启,Java中则是在运行时才开启(但是在编译时,一定要在jdk1.4环境下,否则会编译通过不,因为assert是个新的关键字),方式如下:

java -ea AssertTest

3、assert表达式有两种:

1)assert exp1 此时的exp1为一个boolean类型的表达式

当其值为true时,运行通过,如果为false,则会抛出一个相应的AssertionError,注意它可以被catch,也可以不去处理

2)assert exp1 : exp2 此时的exp1同上,而exp2可以为基本类型或一个Object

当exp1的值为true时,同上,且exp2不会被运算;而当exp1的值为false时,将会抛出AssertionError,同时将exp2的结果作为AssertionError构造器中的参数,当使用catch该错误时,可利用getMessage()方法打印出exp2的结果。

4、关于assert使用的范围

1)不要将其用在去判断public方法的参数,如下

public void f1(int x) {
assert x > 0;
....
}


2)也不要将其用来去直接判断方法的返回值,如下

public boolean f1(int x) {return true;}

public void f2(int y) {assert f1()}


这种情况下,如过assertion为disabled,则f2中的f1()不会执行,此时可以用下面的方法

public void f2() {
boolean flag = f1();
assert flag;
...
}


下面是两个关于assert应用的简单例子

public class AssertTest1 {

public void assertMe(boolean foo) {
assert foo ? true : false;
System.out.println("in true condition");
}

public static void main(String[] args) {
AssertTest1 at = new AssertTest1();
at.assertMe(true);
at.assertMe(false);
}


编译:javac -d . AssertTest1.java

运行:java -ea AssertTest1

结果为:

in true condition

Exception in thread "main" java.lang.AssertionError

at AssertTest1.assertMe(AssertTest1.java:4)

at AssertTest1.main(AssertTest1.java:14)

public class AssertTest2 {

public void assertMe(boolean foo) {
String str = null;
assert foo?true:false : str = "Error Occur!";
System.out.println("in true condition");
}

public static void main(String[] args) {
AssertTest2 at = new AssertTest2();
try {
at.assertMe(true);
at.assertMe(false);
} catch(AssertionError ae) {
System.out.println(ae.getMessage());
}
}
}


运行后结果:

in true condition

Error Occur!

详细参考:http://arthennala.blog.51cto.com/287631/56996
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: