Java断言

断言是什么?

    断言是指在开发期间使用的、让程序在运行时进行自检的代码(通常是一个子程序或宏)。断言为真,则表示程序运行正常,而断言为假,则意味着它已经在代码中发现了意料之外的错误。
    断言对于大型的复杂程序或可靠性要求极高的程序来说尤其有用。通过使用断言,程序员能快速地排查出因修改代码或者别的原因,而弄进程序里的不匹配的接口假定和错误等。
    断言可以用于在代码中说明各种假定,澄清各种不希望的情形。比如输入参数的取值处于预期的范围内。
    断言主要是用于开发和维护阶段。通常,断言只是在开发阶段被编译到目标代码中,而在生成产品代码时并不编译进去。在开发阶段,断言可以帮助查清相互矛盾的假定、预料之外的情况以及传给子程序的错误数据等。在生成产品代码时,可以不把断言编译进目标代码,以免降低性能。
    对于不支持断言的语言,可以建立自己的断言机制。这是“深入一种语言去编程”而不仅是“在一种语言上编程”的很好的例子。

使用断言的指导建议

    1)用错误处理代码来处理预期会发生的状况,用断言来处理绝不应该发生的状况
    断言是用来检查永远不该发生的情况,而错误处理代码是用来检查不太可能经常发生的非正常情况,这些情况是能在写代码时就预料到的,且在产品代码中也要处理这些情况。错误处理通常用来检查有害的输入数据,而断言是用于检查代码中的bug。用错误处理代码来处理反常情况,程序就能够很从容地对错误作出反映。如果在发生异常情况的时候触发了断言,那么要采取的更正措施就不仅仅是对错误作出恰当的反映了——而是应该修改源代码、编译并发布软件的新版本。
    有种方式可以让你更好地理解断言,那就是把断言看作是可执行的注解——你不能依赖它来让代码正常工作,但与编程语言中的注释相比,它更能主动地对程序中的假定作出说明。
    2)避免把需要执行的代码放到断言中
    3)用断言来注解并验证先验条件和后验条件(preconditions & postconditions)
    preconditions和postconditions是一种名为“契约式设计(design by contract)”的程序设计和开发方法的一部分。使用preconditions和postconditions时,每个子程序或类与程序的其余部分都形成了一份契约。
    preconditions是子程序或类的调用方代码在调用子程序或实例化对象之前要确保为真的属性,是调用方代码对其所调用的代码要承担的义务。postconditions是子程序或类在执行结束后要确保为真的属性,是子程序或类对调用方代码所承担的责任。
    断言是用来说明preconditions和postconditions的有利工具。虽然也可以使用注释来说明,但断言却能动态地判断两者是否为真。
    4)对于高健壮性的代码,应该先使用断言再处理错误
    在复杂的代码中,可能同时用断言和错误处理代码来处理同一个错误。

Java中断言的使用

    首先为了使用断言,应先设置vm参数-enableassertions 或 -ea,断言默认是不开启的。
    使用Java的断言有两种方式:
    1)不带错误信息
assert cond;
    开启断言时等价于:
if (!cond)
    throw new AssertionError();
    例如:
assert i > 0;

    2)带错误信息
assert cond: "assert error"

    其中,错误信息可以是任意对象,它将被传递给AssertionError的构造函数,并在错误堆栈中打印出来。
    例如:  
assert obj != null : "obj is null";

参考《代码大全》。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值