概述
防御式编程是设计ADT的一种手段,主要通过异常与断言来实现。
断言
断言用于在运行时检查代码正确性,如下面的代码
public class AssertionTest {
public static void main(String[] args) {
int number = -5;
// assumed number is not negative
// This assert also serve as documentation
assert (number >= 0) : "number is negative: " + number;
// do something
System.out.println("The number is " + number);
}
}
当number<0时,会触发断言,输出提示信息并退出程序
断言要优于if-else语句:1.对程序中的假设起到适当的文档作用;2.在实际运行时不会带来性能问题(在实现运行时断言可被禁止)。
断言常用于检查方法的前置条件和后置条件:
前置条件是方法被调用时必须为真的条件,使用断言检查前置条件,可通过检查输入的参数或当前该对象的状态。
后置条件是成功执行方法后必须为真的条件。例如检查寻找数组最小值的方法的返回值是不是最小值。
通常在测试和调试阶段打开断言(快速发现和定位bugs),在程序发布后关闭(提升性能)。Eclipse中打开和关闭断言的方法如下:
在要运行的文件上点击右键->Run As->Run Configurations调出运行设置窗口,点击Arguments窗格,在VM arguments内容框内填写 -ea 即开启断言,-da即关闭断言。
断言一般用于检测程序内部的bug,一旦断言被触发,则说明程序内部出了问题,但我们对外部的输入该如何处理呢?下面轮到异常登场了。
异常
异常是JAVA特殊的错误处理机制,分为checked和unchecked异常
checked异常为需要进行处理的异常(期望发生的),通常为自定义异常
unchecked异常为JAVA原生异常(不该发生的),不要求进行捕获处理,如java.lang.ArrayIndexOutOfBoundsException
java.lang.NullPointerException
具体关于异常的介绍可以参考《JAVA编程思想》这本书,这里不做过多介绍。
防御式编程
防御性编程是防御性设计的一种形式,旨在确保不可预见情况下软件持续提供功能的能力,主要思想:如果某个方法被传入了不良数据,即使这是另一个子程序的错误,方法本身也不会受到破坏。
前面提到用断言处理内部错误,用异常处理错误输入,这是隔栏策略的一种体现:隔栏外的数据通过异常处理,隔栏内的数据通过断言处理,一旦数据进入隔栏,便保证它是正确的
最后
以上就是俏皮苗条为你收集整理的ADT的设计:断言、异常与防御式编程的全部内容,希望文章能够帮你解决ADT的设计:断言、异常与防御式编程所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复