java assert类_java assert的用法[转载]

assert

是在

J2SE1.4

中引入的新特性,

assertion

就是在代码中包括的布尔型状态,程序员认为这个状态是

true

。一般来说

assert

在开发的时候是检查程序的安全性的,在发布的时候通常都不使用

assert

。在

1.4

中添加了

assert

关键字和

java.lang.AssertError

类的支持。

首先,我们有必要从一个例子说起

assert

public class AssertTest

{

public static void main(String[] args)

{

AssertTest at = new AssertTest();

at.assertMe(true);

at.assertMe(false);

}

privatevoid assertMe(boolean boo)

{

assert boo?true:false;

System.out.println(true condition);

}

}

程序中包含了

assert

的话,你要用

javac -source 1.4 xxx.java

来编译,否则编译器会报错的。要想让

assert

得部分运行的话,要使用

java -ea xxx

来运行,否则包含

assert

得行会被忽略。下面我们运行

javac -source 1.4 AssertTest.java

java -ea AssertTest

看看结果的输出是:

true condition

Exception in thread main java.lang.AssertionError

at AssertTest.assertMe(AssertTest.java:13)

at AssertTest.main(AssertTest.java:7)

当我们运行

at.assertMe(true)

得时候,由于

assert boo?true:false

相当于

assert true;

因此没有任何问题,程序往下执行打印出

true condition

,但是执行

at.assertMe(false)

的时候相当于

assert false

,这个时候解释器就会抛出

AssertionError

了,程序就终止了。大家必须清楚

AssertionError

是继承自

Error

得,因此你可以不再程序中

catch

它的,当然你也可以在程序中

catch

它然后程序可以继续执行。例如:

public class AssertTest

{

public static void main(String[] args)

{

AssertTest at = new AssertTest();

try

{

at.assertMe(true);

at.assertMe(false);

}

catch(AssertionError ae)

{

System.out.println(AsseriontError catched);

}

System.out.println(go on);

}

privatevoid assertMe(boolean boo)

{

assert boo?true:false;

System.out.println(true condition);

}

}

assert

还有另外一种表达的方式,就是

assert exp1:exp2;

其中

exp1

是个

boolean

返回值得表达式,而

exp2

可以是原始的数据类型或者对象都可以例如:

boolean boo = true;

String str = null;

assert boo = false

str=error;

我们刚开始讲得

assert exp1

得形式,当

exp1

false

得时候,

AssertionError

得默认构造器会被调用,但是

assert exp1:exp2

这样的形式,当

exp1

true

的时候后面

exp2

被或略,如果

false

的话,后面的表达式的结果会被计算出来并作为

AssertionError

得构造器参数。看下面的例子:

public class AssertTest

{

public static void main(String[] args)

{

AssertTest at = new AssertTest();

at.assertMe(true);

at.assertMe(false);

}

privatevoid assertMe(boolean boo)

{

String s = null;

assert boo?true:false:s = hello world;

System.out.println(true condition);

}

}

运行的时候会得到这样的结果

true condition

Exception in thread main java.lang.AssertionError: hello world

at AssertTest.assertMe(AssertTest.java:14)

at AssertTest.main(AssertTest.java:7)

Assert

最好不要滥用,原因是

assert

并不一定都是

enable

的,下面两种情况就不应该用

assert

1

不要再

public

的方法里面检查参数是不是为

null

之类的操作

例如

public int get(String s)

{

assert s != null;

}

如果需要检查也最好通过

if s = null

抛出

NullPointerException

来检查

2

不要用

assert

来检查方法操作的返回值来判断方法操作的结果

例如

assert list.removeAll();

这样看起来好像没有问题

但是想想如果

assert

disable

呢,那样他就不会被执行了

所以

removeAll()

操作就没有被执行

可以这样代替

boolean boo = list.removeAl();

assert boo;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值