?????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);
??? ??? }
}