我是靠谱客的博主 风中凉面,最近开发中收集的这篇文章主要介绍6-3 断言与防御式编程(待完善),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

  • 本博客为哈工大计算机科学与技术学院大二软件构造课程的课件翻译。同时记录了部分本人上课时的学习笔记感悟
  • 该博客1000字左右,主题为6-2 错误与异常处理未更新完成
  • 由于水平有限,翻译可能不是特别流畅、通顺,并且存在一定错误,观点、笔记不一定完全正确,敬请各位批评指正!
    大纲
  • 回顾:设计一个ADT
  • 断言:
  • 什么是断言什么不是
  • 使用断言的指导
  • 防御式编程
  • 防御式编程技术
  • 防御式编程检查表
  • SpotBugs工具
  • 总结

回顾:设计一个ADT

第一个防御:让bug不可能出现

  • 对付bug的最好办法是通过设计使它们不可能出现。
  • 静态检查:通过在编译时捕获bug来消除许多bug。
  • 动态检查:Java通过动态捕获数组溢出错误而使之不可能。如果尝试在数组或列表的边界之外使用索引,那么Java会自动产生错误。——未检查的异常/运行时错误
  • 不变性:不可变类型是一种类型,它的值一旦创建就永远不会改变。
  • 不可变值:由final,它可以被分配一次但永远不会重新分配。
  • 不可变引用:通过final,这使得引用不可重新分配,但是引用指向的对象可以是可变的或不可变的。

第二道防线:本地化bug

  • 如果我们不能防止错误,我们可以试着将它们定位到程序的一小部分,这样我们就不用费劲地寻找错误的原因。
    • 当本地化到单个方法或小模块时,只需研究程序文本就可以发现错误。
    • 快速失败:问题发现得越早(越接近其原因),就越容易修复
  • 然而,由于错误调用表明调用者中存在错误,最有用的行为是尽早指出错误。
  • 断言:前提条件不满足时,这段代码抛出AssertionError之外异常终止程序。调用者的错误的影响被阻止传播。快速失败,
  • 检查前置条件就是防御性编程的一个例子
    • 真正的程序很少是没有bug的。
    • 防御性编程提供了一种减轻bug影响的方法,即使您不知道bug在哪里。

2、断言

(1)什么是断言,为什么要断言?

什么是断言?

  • 断言是开发过程中使用的代码,它允许程序在运行时检查自身,即,以测试关于程序逻辑(如前置条件、后置条件和不变量)的假设。
  • 当断言为真时,就意味着一切都按预期运行。
  • 当它为false时,意味着它在代码中检测到一个意外错误。
  • 一个例子
  • 每个断言都包含一个您认为在程序执行时为真的布尔表达式。
    • 如果不为真,JVM将抛出一个AssertionError。
    • 这个错误告诉您,您的假设是无效的,需要加以修正。
    • 该断言确认了您对程序行为的假设,增加了您对程序没有错误的信心。
  • 断言要比使用if-else语句好得多,因为它可以作为假设的适当文档,并且在生产环境中不会带来性能问题。

最后

以上就是风中凉面为你收集整理的6-3 断言与防御式编程(待完善)的全部内容,希望文章能够帮你解决6-3 断言与防御式编程(待完善)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部