java学习笔记之断言(Assertion)

本篇讲述的是java中的断言(Assertion)。

断言并不是java所独有的,在很多程序语言中都有,如C,C++,Python等,只是它们的表现形式可能略有不同。那么断言到底是什么呢?

断言主要使用在代码开发和测试时期,对于一些关键数据进行判断,如果符合表达式判断,则程序继续进行,如果不符合,则程序会抛出异常(AssertionError)并有相关警告提醒。
这么一说是不是有一种这样的感觉:

if(expression){
    //程序继续运行
}else{
    //抛异常,输出有关出错信息
}

暂且理解成是这样的简便方法吧,但设计者肯定是有着更深层次的思考,毕竟java为断言保留了关键字(assert),如果不重要,也不会如此了。

 

在我的理解看来,断言就是我们在开发测试阶段,用于检测那些我们可以确定的一些值,是否因为一些特殊原因导致了此处的值不是预期的值,总之断言就是为了保证我们程序最基本的正确性。比如你的底层方法中需要一个非空字符串作为参数传入,并且你知道此处传入的值必定是一个非空字符串,那么你就可以在此处加入断言,当此处传入为空的时候,程序便会在此处抛出AssertionError异常,表明此处存在着问题,并终止运行。

java中断言有自己的关键字,assert,它的使用方式有两种格式:

1.assert expression :这里的表达式是一个逻辑运算表达式,最终返回true/false,当为true时,程序正常执行,false时抛出异常终止程序。

 

private boolean sendMessage(String message){
    boolean isSuccess = false;
    assert message!= null;
    //send...
    isSuccess = true;
    return isSuccess;
}

2.assert expression1 : expression2 :这里的表达式1是一个逻辑运算表达式,最终返回true/false,表达式2是一个字符串表达式,如果表达式1为true时,程序正常运行,过为false则抛出异常,终止程序,并将表达式2的内容随异常信息一起打印。

 

private boolean sendMessage(String message){
    boolean isSuccess = false;
    assert message!= null:"the param message is null";
    //send...
    isSuccess = true;
    return isSuccess;
}

断言还有一大特点就是我们可以选择性的开启或关闭它们,在开发和测试阶段中,我们可以通过断言来帮助我们发现问题,在正式发布时,为了不影响程序的效率,我们可以通过参数控制,将其关闭即可(瞬间想起了以前不知道断言时,自己写输出语句来判断,事后还要注释掉的情况下了)。
java中的断言是在1.4之后才引入的,并且一般情况下断言的使用是默认关闭的,如果需要启用该功能,需要在jvm启动时加入-ea参数。以我使用的Eclipse为例,要进行如下操作开启断言功能:Windows -> Preferences ->java ->Installed JREs ->点击正使用的JDK ->Edit ->Default VM Arguments文本框中输入:-ea

java中断言机制貌似是通过包(package)来实现的,在我看来是类似于在不同包下有相同的方法,通过参数来控制导入的是哪一个包从而来实现断言,这只是我的一个猜测,正确性有待考证。

至于断言的使用心得,看到一篇博客,如果有兴趣的可以前往观看,java断言使用
以上为本篇内容。

 

 

 

 

posted @ 2017-09-01 09:35  moonfish  阅读(855)  评论(0编辑  收藏  举报