美文网首页Java
Java学习笔记之断言(Assertion)

Java学习笔记之断言(Assertion)

作者: moonfish1994 | 来源:发表于2019-12-17 14:19 被阅读0次

    (最近刚来到简书平台,以前在CSDN上写的一些东西,也在逐渐的移到这儿来,有些篇幅是很早的时候写下的,因此可能会看到一些内容杂乱的文章,对此深感抱歉,以下为正文)


    本篇讲述的是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


    1.png

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

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

    相关文章

      网友评论

        本文标题:Java学习笔记之断言(Assertion)

        本文链接:https://www.haomeiwen.com/subject/wsmsnctx.html