使用断言

断言


1.断言的概念

  若确信某个属性符合要求,并且代码的执行依赖于这个属性。比如:需要计算 double y=Math.sqrt(x);
  上述可以确信的是x是一个非负数值。但是还是希望进行检查,以避免让“不是一个数”的数值参与计算操作。在这里可以抛出异常来处理这个问题,但是异常处理的代码在测试完毕之后不会自动删除,如果代码中含有大量的这种检查,程序运行起来也会很慢。
  断言机制就是允许在测试期间向代码中插入一些检查语句,。当代码发布时,这些插入的检测语句将会被自动移走(注意和异常检查的不同)。

  Java语言引入了关键字assert,两种形式:

①assert 条件;
②assert 条件:表达式;

  上述两种形式都会对条件进行检测,如果结果为false,则会抛出一个AssertionError异常。在第二种形式中,表达式将被传入AssertionError的构造器,并转换成一个消息字符串。

  要想断言x是一个非负数值,只需要简单的使用语句: assert x>=0; 或者将x的实际值传递给AssertionError对象,从而可以在后面显示出来 assert x>=0:x;
   注意:在Java中,条件并不会自动的成为错误报告中的一部分。如果希望看到这个条件,就必须将它以字符串的形式传递给AssertionError对象:assert x>=0:“x>=0”




2.启用和禁用断言

  默认情况下,断言被禁用。

    ①可以在运行程序时用-enableassertions或者-ea选项启用:java -enableassertions MyApp

  注意:在启用或者禁用断言时不必重新编译程序。启用或禁用断言是类加载器的功能。当断言被禁用时,类加载器将跳过断言代码,因此,不会降低程序的运行速度
也可以在某个类或者整个包中使用断言,如:
java -ea:MyClass -ea:com.mycompany.mylib… MyApp这条命令将开启MyClass类以及在com.mycompany.mylib包和它的子包中的所有类的断言。选项-ea将开启默认包中所有类的断言

    ②可以用选项-disableassertions或-da禁用某个特定类和包的断言:java -da:MyClass MyApp


    有些类不是由类加载器加载的,而是直接由虚拟机加载。可以使用这些开关有选择的启用或者禁用那些类中的断言。但是启用或者禁用所有断言的-ea和-da开关不能应用到那些没有类加载器的“系统类”上,对于这些系统来说,需要使用-enablesystemassertions/-esa开关启用断言




3.使用断言完成参数检查

    在Java语言中,给出了3种处理系统错误的机制:
抛出一个异常;日志; 使用断言

    那么什么时候应该使用选择断言呢?

1.断言失败是致命的,不可恢复的错误
2.断言检查只用于开发和测试阶段

    因此不应该使用断言向程序的其他部分通告发生了可恢复性的错误,或者,不应该作为程序向用户通告问题的手段。断言只应该用于在测试阶段确定程序内部的错误位置




4.为文档假设使用断言

例子:

if(i%3 == 0)

else if(i%3 == 1)

else // (i%3 == 2)

    上述代码例子使用断言会更好一些

if(i %3 == 0)

else if(i%3 == 1)

else
{
assert i%3 == 2;

}

    使用断言来进行自我检查,上述代码中 i%3 ,如果i是正值,那么余数肯定是0,1,2。如果i是负值,则余数则可以是-1,-2。但是实际上都认为i是非负数,因此,最好在if语句之前使用下列断言: assert i >=0;





IDEA中如何开启断言

1. 
在这里插入图片描述2.将选项中的内容修改为-enableassertions或者-ea,确认。即启用断言
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值