assert java

作者:原创时间:2022-03-18
文档

assert java是什么,让我们一起了解一下?

assert java是一些布尔表达式,程序员相信在程序中的某个特定点该表达式值为真,可以在任何时候启用和禁用断言验证,因此可以在测试时启用断言,而在部署时禁用断言。

那么,assert(断言)有哪些特性?

前置条件断言:代码执行之前必须具备的特性

后置条件断言:代码执行之后必须具备的特性

前后不变断言:代码执行前后不能变化的特性

通过assert(断言)的特性,可以划分以下两种形式

1.assert Expression1

2.assert Expression1:Expression2

其中Expression1应该总是一个布尔值,Expression2是断言失败时输出的失败消息的字符串。如果Expression1为假,则抛出一个 AssertionError,这是一个错误,而不是一个异常,也就是说是一个不可控制异常(unchecked Exception),AssertionError由于是错误,所以可以不捕获,但不推荐这样做,因为那样会使你的系统进入不稳定状态。


另外,assert(断言)在默认情况下是关闭的,要在编译时启用断言,需要使用source1.4标记 即javac source1.4 Test.java ,在运行时启用断言需要使用 -ea参数 。要在系统类中启用和禁用断言可以使用 -ea和 -dsa参数。

例如:

public class AssertExampleOne{
    public AssertExampleOne(){}
    public static void main(String args[]){
        int x=10;
        System.out.println("Testing Assertion that x==100");
        assert x==100:"Out assertion failed!";
        System.out.println("Test passed!");
    }
}

如果编译时未加 -source1.4,则编译通不过

在执行时未加 -ea 时输出为

Testing Assertion that x==100

Test passed!

jre忽略了断言的旧代码,而使用了该参数就会输出为

Testing Assertion that x==100

Exception in thread "main" java.lang.AssertionError: Out assertion failed!

at AssertExampleOne.main(AssertExampleOne.java:6)

值得注意的是,由于程序员的问题,断言的使用也可能会带来副作用。

例如:

boolean isEnable=false;
assert isEnable=true;
这个断言的副作用是因为它修改了程序中变量的值并且未抛出错误,这样的错误如果不细心的检查是很难发现的。但是同时我们可以根据以上的副作用得到一个有用的特性,根据它来测试断言是否打开。
public class AssertExampleTwo{
    public static void main(String args[]){
        boolean isEnable=false;
        assert isEnable=true;
        if(isEnable==false){
            throw newRuntimeException("Assertion should be enable!");
        }
    }
}

以上就是小编今天的分享了,希望可以帮助到大家。

显示全文
asterisk java axis java bitset java boolean java brew java c#调用java c#调用java接口 cache java calendar java qq实名认证怎么解除 callable java character java class转java cmake java compareto java 被删的微信聊天记录怎么找回来 continue java django java 微信怎么群发消息给多人 double java 怎样改抖音名字的昵称 aspect java ansible java ajax java antlr java 交管12123怎么查科目一分数 abstract java 拼多多拒收在哪里操作 微信恢复删除的聊天记录 微信扫码不能扫了怎么办 怎样查看微信删除的聊天记录 两个二维码怎么拼一起 电脑忘记开机密码怎么办 js 字符串转数字 linux ftp python range函数 java 泛型 java json java final java foreach