java断言assert的概念_Java中Assert的出产情况参数校验中的利用

?????Tony

Hoare爵士有这样一个概念:"在测试时利用断言,而在产物发布时将断言关闭的程序员,就像是在岸上操练时穿戴浮水衣,而下海时将救生衣脱失落的海员。

"

在java临盆系统中,很少看到断言的存在,即便在用Junit测试,多数环境下也是System.out.println来获得成果,断言被置之不理。存期近合理,jdk(1.4今后的版本)既然把assert作为他的关头字,必定是系统运用中有相关的场景。

????? java中的assert的语法:assert booleanvalue : error

info。若是是返回false,则抛出java.lang.AssertionError,这个类担当了Error类(Error 是

Throwable

的子类,用于唆使公道的利用法式不该该试图捕捉的严重问题),所以系统抛出这类异常的时辰,你可以不处置惩罚(这不代表你不克不及catch)。出产系统的大都异常都是需要处置并返回给用户,所以我们可以在系统设计的焦点营业挪用的位置catch

AssertionError错误。

public void assertor(){

??? ??? int x =1;

??? ??? assert x==1?true:false;

??? ??? System.out.println("print

yes");

??? ??? assert x==2?true:false :

"有错误!";

??? ??? System.out.println("no

print");

??? }

??????

在eclipse履行这段代码,可以正常的执行终了,并没有发现问题。这是由于eclipse默许是封闭断言的,经由过程添加参数-ea

来打开断言,就发现有以下错误:

java.lang.AssertionError: 有错误!

?????? 在代码中添加捕捉异常的代码,然后可以做相干的处理。

public void assertor(){

??? ??? int x =1;

??? ??? assert x==1?true:false;

??? ??? System.out.println("print

yes");

??? ??? try {

??? ??? ??? assert x==2?true:false :

"有毛病!";

??? ??? } catch (AssertionError e) {

??? ??? ??? System.out.println("has

error");

??? ??? }

??? ??? System.out.println("no

print");

??? }

????? 在web

service系统API中,要求过程当中会有良多的参数校验,多半参数需要判断参数是不是为空,程序中会有这样的代码:

if(StringUtils.isBlank("name")){

??? //doing someting

}

if(StringUtils.isBlank("age")){

??? //doing someting

}

????? 或是重构一把,把参数放入map中,同一的去遍历map来解决这个问题。

Map map = new

HashMap();

map.put("name",name);

//通过map来遍历处理抛犯错误来校验。

public void

VolicateNull(Map

map){

??? ??? for(Entry

entry:map.entrySet()){

??? ??? ??? if(StringUtils.isBlank(entry.getValue())){

??? ??? ??? ??? throw new

NullPointerException(entry.getKey());

??? ??? ??? }

??? ??? }

}

????? 在我们new

对象的时刻建立了系统资本,固然jdk可以主动收受接管,可是也造成了相关的系统华侈,因为assert可以帮你完成相关操作的。我们可以在系统中如许:

assert

StringUtils.isBlank("name") :

"some message";

assert StringUtils.isBlank("age")

: "some

message";

尔后捕捉错误,做出相关的处理。

?????

或许你感觉JDK中的异经常使用的不爽,这些都是Error的东东,看着觉得头痛,那你可以常识用Sprint中的org.springframework.util.Assert类来做相关的处理,这个类抛出IllegalArgumentException异常,做参数的校验再好也不外了。里面的方式很全,可以看源码领会,例如为空的判定。

public static void isNull(Object object, String message) {

??? ??? if (object != null) {

??? ??? ??? throw new IllegalArgumentException(message);

??? ??? }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值