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

断言

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


[一] 关于断言

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

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


[二] 断言的语法

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

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


[三] 小试断言

@Test
public void demo1() {
    int a = 0;
    assert a == 1;
    // 输出:java.lang.AssertionError
}
@Test
public void demo2() {
    int a = 0;
    assert a == 1 : "a的值不是1";
    System.out.println("a的值是" + a);
    // 输出:java.lang.AssertionError:a的值不是1
}
@Test
public 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 AssertTest
Exception 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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值