转载自微信公众账号:开点工作室(ID:kaidiancs)

Java程序中,程序员可以使用前置条件与后置条件,来控制是否执行方法及判断方法是否正确执行。

前置条件(precondition)是一条条件语句,在方法执行前必须为真。除非前置条件满足,否则不应该使用方法,也不能期待方法能正确执行。前置条件可以与方法参数的描述相关。例如,计算x平方根的方法可以用x≥0作为前置条件。

后置条件(postcondition)是一条语句,当前置条件满足且完全执行方法后,它为真。对于一个值方法,后置条件将描述方法返回的值。对于一个void方法,后置条件描述所做的动作及对调用对象的任何修改。一般地,后置条件描述方法调用产生的所有影响。考虑后置条件可以有助于弄清楚方法的目的。

注意:不能满足后置条件的方法,即使符合前置条件,也可以抛出异常。

前置条件意味着职责,要保证必须满足特定条件。如果在调用方法前由客户负责满足条件,则方法不必检查条件。或者,如果方法负责让条件成立,则客户不必检查它们。例如,要规范说明一个求平方根的方法,可以在方法头前面写如下的注释:

/** Computes the square root of a number.

@param x A real number >= 0.

@return The square root of x.

*/

这个注释表明,方法假定客户要提供一个非负数作为参数。

更安全的技术是让方法承担检查参数的责任。例如它的注释应该如下:

/** Computes the square root of a number.

@param x A real number.

@return The square root of x if x >= 0.

@throws ArithmeticException if x < 0.

*/

虽然在前面的注释中我们将前置条件和后置条件集成在一起,不过也可以将它们单独分开。

程序设计技巧:在方法头之前的注释中充分说明每个公有方法。对于确保方法能正确执行而必须满足的条件,要说明是由方法还是由客户来负责进行检查。以这种方式,既做了检查又不会重复检查。但在调试过程中,方法应该检查前置条件是否满足。

当使用继承和多态来重写父类中的一个方法时,子类中的方法可能会出现与父类中的方法不一致的问题。前置条件和后置条件可以帮助程序员避免这个问题。后置条件必须适用于子类中方法的所有版本。重写的方法可以添加到后置条件中——即它能做的更多——但不能做的更少。不过重写的方法不能增加其前置条件。换句话说,它不能比基类中的方法要求得更多。

《横扫offer---程序员招聘真题详解700题》,开点工作室著,清华大学出版社出版,天猫、京东等各大网上书店及实体书店均已开始发售。

java 前置零_程序员面试必考题(二十二):Java中的前置条件和后置条件相关推荐

  1. 程序员面试100题之十二:求数组中最长递增子序列

    写一个时间复杂度尽可能低的程序,求一个一维数组(N个元素)中最长递增子序列的长度. 例如:在序列1,-1,2,-3,4,-5,6,-7中,其最长递增子序列为1,2,4,6. 分析与解法 根据题目要求, ...

  2. java只会用不知道原理6_程序员面试宝典之14道初级Java面试题分享

    程序员面试宝典之14道初级Java面试题分享 程序员面试宝典之14道初级Java面试题分享! 关于赢在面试的Java题系列基本收集整理完成了,所有题目都是经过精心挑选的,很基础又考验求职者的基本功,应 ...

  3. 【重点】程序员面试金典——番外篇之数组中的逆序对

    程序员面试金典--番外篇之数组中的逆序对 此题曾多次遇到,然鹅还是本能的想起来复杂度为O(n2)O(n2)O(n^2)的笨蛋方法... Solution1:笨蛋方法 class AntiOrder { ...

  4. (88)FPGA二分频设计,面试必问(十二)(第18天)

    (88)FPGA二分频设计,面试必问(十二)(第18天) 1 文章目录 1)文章目录 2)FPGA初级课程介绍 3)FPGA初级课程架构 4)FPGA二分频设计,面试必问(十二)(第18天) 5)技术 ...

  5. 《数据结构与抽象:Java语言描述(原书第4版)》一P.2.2 前置条件和后置条件...

    本节书摘来华章计算机<数据结构与抽象:Java语言描述(原书第4版)>一书中的第1章 ,第1节,[美]弗兰克M.卡拉诺(Frank M. Carrano) 蒂莫西M.亨利(Timothy ...

  6. javascript技术教程蔡敏_程序员都必掌握的前端教程之JavaScript基础教程(上)

    阅读本文约需要10分钟,您可以先关注我们,避免下次无法找到. 本篇文章成哥继续带大家来学习前端教程之JavaScript,网页的动态事件基本上都是靠它来实现的.下面我们就一起来学习内容吧! 01 Ja ...

  7. python程序员面试自我介绍_程序员面试经验总结

    主要包括以下内容: 一.程序员面试过程中,面试官想要从 " 自我介绍 " 获得什么信息? 二.如何去提炼简历中的精华?如何在沟通中体现你的软技能? 三.如何去解释简历中的瑕疵? 四 ...

  8. 初级程序员面试不靠谱指南(二)

    3.read-only的const.如果你突然冒出一句看似很高深的话但又不解释一般都是装逼,就像前面提到过const准确的应该理解为一个read-only的变量而不是一个常量,那么常量和变量的区别到底 ...

  9. 程序员的奋斗史(四十二)——大学断代史(六)——我与图书馆

    文/温国兵 作为一个爱读书之人,图书馆简直是人间天堂.反之,不过地狱. 读书的好处在于,可以穿越古今中外,超越时间和空间的界限,到达你想到达的地方.你可以回到唐朝和诗仙酌酒言欢,可以回到战国和庄子高谈 ...

最新文章

  1. Delphi 与C系列区别之已见(一)
  2. 解决在Python中使用Win32api报错的问题,No module named win32api
  3. nodejs+nginx获取真实ip
  4. css外观样式 1204
  5. kali安装nessus_漏洞扫描工具Nessus指南
  6. std::function
  7. Centos6.7 64位安装配置kvm虚拟化
  8. vue环境搭建及创建项目
  9. 软件产品案例分析----K米app
  10. excel只能在编辑栏粘贴_如何在Excel中切换到编辑模式
  11. MySQL 系列(三)你不知道的 视图、触发器、存储过程、函数、事务、索引、语句
  12. 计算机硬盘数据清零,如何完全清除硬盘数据,使其永不恢复
  13. batchsize太小的缺点随着batchsize逐渐增大的优缺点如何平衡batchsize的大小
  14. Vue中使用pdfJs预览PDF、图片
  15. Linux就该这么19期高清录播-入门实战-企业常见服务搭建
  16. 传记-《成为米歇尔·奥巴马》书中的精髓:米歇尔·奥巴马是怎样克服种族歧视、冲破阶层天花板,成为美国首位非洲裔第一夫人的。
  17. 苹果CMSv10模板带后台和迅雷下载的侧栏样式
  18. android 辐射动画_Android仿微信雷达辐射搜索好友(逻辑清晰实现简单)
  19. 模拟赛DAY1 T2腐草为萤
  20. matlab 吸波材料,如何计算多层吸波材料的反射率 - 材料 - 小木虫 - 学术 科研 互动社区...

热门文章

  1. 认知升级篇:为什么我们一定要掌握自学能力?
  2. vue单元测试SyntaxError: Unexpected token ‘export‘
  3. 页面验证是否是真实有效的身份证号码
  4. u盘插在电脑上没有反应_电脑无法识别U盘或插上U盘提示格式化
  5. 计算机名和DNS域名的关系,域名、DNS、IP地址的对应关系
  6. C语言三个数相乘怎么写,编程怎么写乘法
  7. 开源软件负载均衡方案比较
  8. mysql workbench 报 tables could not be fetched.
  9. python九宫格拼图_Python制作九宫格图片
  10. 【考试题解】 递归递推