Java中的“关卡”——断言(Assertion)

来源:互联网 发布:网络监控存储 编辑:程序博客网 时间:2024/05/22 16:38

断言

在防御式编程中,所有的外部因素(输入参数、环境变量等)都被看作是“邪恶”的,它们都是企图摧毁程序的罪恶本源,为了抵制它们,我们需要在程序中处处设卡检验,只有满足条件才能继续执行后续程序,以保证程序的正确性。断言(Assertion)就是用于确保程序执行正确的“关卡”,使用断言可以避免因错误的输入而导致的程序逻辑错误。


[一] 关于断言

  • 断言是JDK1.4加入的新特性

  • JVM默认不启用断言功能(开启方法请看下文)


[二] 断言的语法

assert <布尔表达式> : <错误信息> ;

其中,<布尔表达式>返回true或false,用于判断是否断言成功;<错误信息>用于描述断言失败,可留空不写


[三] 小试断言

@Testpublic void demo1() {    int a = 0;    assert a == 1;    // 输出:java.lang.AssertionError}
@Testpublic void demo2() {    int a = 0;    assert a == 1 : "a的值不是1";    System.out.println("a的值是" + a);    // 输出:java.lang.AssertionError:a的值不是1}
@Testpublic void demo3() {    int a = 1;    assert a == 1 : "a的值不是1";    System.out.println("a的值是" + a);    // 输出:a的值是1}

【总结】
只有断言成功才会执行后续的代码,否则会抛出AssertionError错误并终止程序


[三] 断言开启与关闭

1. 在命令行中使用-ea和-da

① 首先,我们编写一个测试类AssertTest.java

public class AssertTest {    public static void main(String[] args) {        assert false : "断言被执行了";        System.out.println("断言没有被执行");    }}

② 编译代码,并在默认情况下以及使用-ea/-da的情况下执行代码

- javac AssertTest.java- java AssertTest断言没有被执行- java -da AssertTest断言没有被执行- java -ea AssertTestException in thread "main" java.lang.AssertionError: 断言被执行了        at AssertTest.main(AssertTest.java:3)

【总结】
在JVM中,默认断言功能是关闭的,可以使用 -ea 对断言功能进行开启,使用 -da 对断言功能进行关闭

VM options -ea    // 开启断言功能VM options -da    // 关闭断言功能

2. 在Eclipse中使用断言运行某个方法

方法-ea

3. 在Eclipse中为整个项目开启断言功能

项目-ea

0 0
原创粉丝点击