Java基础——断言

断言是什么?

断言允许在测试期间向代码中插入一些检查语句,当代码发布时,这些插入的检查语句将会自动地移走

断言的定义

断言通过assert关键字实现,有两种形式:

  • assert condition;
  • assert condition: expression;

判断condition是否成立,false则抛出AssertionError异常,而在第二种形式,expression会被传入AssertionError的构造方法并转换成消息字符串,不能获取其值

断言意义和实现

下面代码用于[0,3]随机正整数生成,判断条件有i ==0 和 i ==1以及其他,这个其他一定会等于2吗?

Random random = new Random();
int i = random.nextInt(3);
if (i == 0) {
    System.out.println(0);
} else if (i == 1) {
    System.out.println(1);
} else {
    System.out.println(2);
}

貌似可以肯定,但在大项目中,实际上不能确定 i 的值有没有在中途经过修改,如果每次对于这样的代码都要经过一次如下的肯定判断进行测试,测试之后又要把它删除,否则这些判断会让程序的运行速度降低

if(i==2){
    System.out.println(2);
}

为此引进断言在测试期间进行检查,且这些检查语句会自动地删除不影响最终的程序

Random random = new Random();
int i = random.nextInt(3);
if (i == 0) {
    System.out.println(0);
} else if (i == 1) {
    System.out.println(1);
} else {
    assert i == 2;
    System.out.println(2);
}

如果 i 在运行期间改变且不等于2,else中会抛出AssertionError异常,也可传入参数用于构造AssertionError,以便以后打印具体的错误

assert i == 2 : "i != 2";

启用和禁用断言

断言默认为关闭,启用和禁用断言无需再次编译代码

在当前运行程序中通过-enableassertion或-ea启动断言

java -enableassertion programName

如果需对某个类或整个包中的所有类启动断言

java -ea:className
java -ea:com.example.demo

如要禁用断言通过-disableassertion或-da启动断言,禁用后类加载器会跳过断言代码

java -da:className
java -da:com.example.demo
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值