程序員面試必考題(二十二):Java中的前置條件和后置條件

轉(zhuǎn)載自微信公眾賬號(hào):開(kāi)點(diǎn)工作室(ID:kaidiancs)
Java程序中,程序員可以使用前置條件與后置條件,來(lái)控制是否執(zhí)行方法及判斷方法是否正確執(zhí)行如蚜。

前置條件(precondition)是一條條件語(yǔ)句,在方法執(zhí)行前必須為真。除非前置條件滿足仁卷,否則不應(yīng)該使用方法,也不能期待方法能正確執(zhí)行犬第。前置條件可以與方法參數(shù)的描述相關(guān)锦积。例如,計(jì)算x平方根的方法可以用x≥0作為前置條件歉嗓。

后置條件(postcondition)是一條語(yǔ)句丰介,當(dāng)前置條件滿足且完全執(zhí)行方法后,它為真鉴分。對(duì)于一個(gè)值方法哮幢,后置條件將描述方法返回的值。對(duì)于一個(gè)void方法志珍,后置條件描述所做的動(dòng)作及對(duì)調(diào)用對(duì)象的任何修改橙垢。一般地,后置條件描述方法調(diào)用產(chǎn)生的所有影響伦糯」衲常考慮后置條件可以有助于弄清楚方法的目的嗽元。
注意:不能滿足后置條件的方法,即使符合前置條件喂击,也可以拋出異常剂癌。

前置條件意味著職責(zé),要保證必須滿足特定條件翰绊。如果在調(diào)用方法前由客戶負(fù)責(zé)滿足條件佩谷,則方法不必檢查條件〖嗍龋或者谐檀,如果方法負(fù)責(zé)讓條件成立,則客戶不必檢查它們秤茅。例如稚补,要規(guī)范說(shuō)明一個(gè)求平方根的方法,可以在方法頭前面寫(xiě)如下的注釋?zhuān)?/p>

/** Computes the square root of a number.
@param x A real number >= 0.
@return The square root of x.
*/

這個(gè)注釋表明框喳,方法假定客戶要提供一個(gè)非負(fù)數(shù)作為參數(shù)课幕。

更安全的技術(shù)是讓方法承擔(dān)檢查參數(shù)的責(zé)任。例如它的注釋?xiě)?yīng)該如下:

/** 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.
*/

雖然在前面的注釋中我們將前置條件和后置條件集成在一起五垮,不過(guò)也可以將它們單獨(dú)分開(kāi)乍惊。

程序設(shè)計(jì)技巧:在方法頭之前的注釋中充分說(shuō)明每個(gè)公有方法。對(duì)于確保方法能正確執(zhí)行而必須滿足的條件放仗,要說(shuō)明是由方法還是由客戶來(lái)負(fù)責(zé)進(jìn)行檢查润绎。以這種方式,既做了檢查又不會(huì)重復(fù)檢查诞挨。但在調(diào)試過(guò)程中莉撇,方法應(yīng)該檢查前置條件是否滿足。

當(dāng)使用繼承和多態(tài)來(lái)重寫(xiě)父類(lèi)中的一個(gè)方法時(shí)惶傻,子類(lèi)中的方法可能會(huì)出現(xiàn)與父類(lèi)中的方法不一致的問(wèn)題棍郎。前置條件和后置條件可以幫助程序員避免這個(gè)問(wèn)題。后置條件必須適用于子類(lèi)中方法的所有版本银室。重寫(xiě)的方法可以添加到后置條件中——即它能做的更多——但不能做的更少涂佃。不過(guò)重寫(xiě)的方法不能增加其前置條件。換句話說(shuō)蜈敢,它不能比基類(lèi)中的方法要求得更多辜荠。

由開(kāi)點(diǎn)工作室編寫(xiě),清華大學(xué)出版社出版的《橫掃offer---程序員招聘真題詳解700題》一書(shū)已經(jīng)在天貓抓狭、京東等各大網(wǎng)上書(shū)店及實(shí)體書(shū)店開(kāi)始發(fā)售伯病。本書(shū)精心選取了700道各IT名企程序員招聘筆試面試的真題,書(shū)中內(nèi)容按照目前各主流IT企業(yè)技術(shù)類(lèi)招聘考試試題所涉及到的專(zhuān)業(yè)知識(shí)領(lǐng)域否过,劃分為8章:第1章為C語(yǔ)言程序設(shè)計(jì)狱从,第2章為面向?qū)ο蟪绦蛟O(shè)計(jì)膨蛮,第3章為數(shù)據(jù)結(jié)構(gòu)與算法,第4章為計(jì)算機(jī)組成原理季研,第5章為操作系統(tǒng),第6章為計(jì)算機(jī)網(wǎng)絡(luò)誉察,第7章為數(shù)據(jù)庫(kù)系統(tǒng)与涡,第8章為數(shù)學(xué)與邏輯。各章直接對(duì)招聘考試真題展開(kāi)解析持偏,將試題涉及到知識(shí)點(diǎn)進(jìn)行精準(zhǔn)地歸納和深入地闡述驼卖,而省去了與之不相關(guān)教材內(nèi)容的堆砌,確保應(yīng)聘者的學(xué)習(xí)更加有針對(duì)性鸿秆。我們希望本書(shū)的讀者能夠把書(shū)中每一道試題的解析讀懂酌畜、吃透,從而牢固掌握試題所涉及到相關(guān)知識(shí)的內(nèi)涵卿叽、外延和綜合應(yīng)用桥胞,真正做到舉一反三。同時(shí)考婴,本書(shū)專(zhuān)注于計(jì)算機(jī)專(zhuān)業(yè)技術(shù)試題的分析講解贩虾,不涉及性格測(cè)試、智力測(cè)驗(yàn)沥阱、常識(shí)測(cè)試缎罢、英語(yǔ)測(cè)試以及面試禮儀等非技術(shù)領(lǐng)域內(nèi)容,真正做到“沒(méi)有雞湯考杉,全是干貨”策精。

“撥開(kāi)學(xué)習(xí)中的荊棘迷霧,指點(diǎn)探索中的靈感思路”崇棠,希望這本凝結(jié)了集體智慧和心血的教材咽袜,能夠充分體現(xiàn)開(kāi)點(diǎn)工作室的創(chuàng)作主旨,為廣大IT求職者提供真正的幫助易茬。希望每一名熱愛(ài)這個(gè)行業(yè)酬蹋,充滿熱情和力量的年輕人都能夢(mèng)想成真。

更多計(jì)算機(jī)學(xué)習(xí)技術(shù)文章請(qǐng)關(guān)注微信公眾賬號(hào):開(kāi)點(diǎn)工作室(ID:kaidiancs)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末抽莱,一起剝皮案震驚了整個(gè)濱河市范抓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌食铐,老刑警劉巖匕垫,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異虐呻,居然都是意外死亡象泵,警方通過(guò)查閱死者的電腦和手機(jī)寞秃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)偶惠,“玉大人春寿,你說(shuō)我怎么就攤上這事『瞿酰” “怎么了绑改?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)兄一。 經(jīng)常有香客問(wèn)我厘线,道長(zhǎng),這世上最難降的妖魔是什么出革? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任造壮,我火速辦了婚禮,結(jié)果婚禮上骂束,老公的妹妹穿的比我還像新娘耳璧。我一直安慰自己,他們只是感情好栖雾,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布楞抡。 她就那樣靜靜地躺著,像睡著了一般析藕。 火紅的嫁衣襯著肌膚如雪召廷。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,441評(píng)論 1 310
  • 那天账胧,我揣著相機(jī)與錄音竞慢,去河邊找鬼。 笑死治泥,一個(gè)胖子當(dāng)著我的面吹牛筹煮,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播居夹,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼败潦,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了准脂?” 一聲冷哼從身側(cè)響起劫扒,我...
    開(kāi)封第一講書(shū)人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎狸膏,沒(méi)想到半個(gè)月后沟饥,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年贤旷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了广料。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡幼驶,死狀恐怖艾杏,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情盅藻,我是刑警寧澤糜颠,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站萧求,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏顶瞒。R本人自食惡果不足惜夸政,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望榴徐。 院中可真熱鬧守问,春花似錦、人聲如沸坑资。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)袱贮。三九已至仿便,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間攒巍,已是汗流浹背嗽仪。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留柒莉,地道東北人闻坚。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像兢孝,于是被迫代替她去往敵國(guó)和親窿凤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,303評(píng)論 25 707
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理跨蟹,服務(wù)發(fā)現(xiàn)雳殊,斷路器,智...
    卡卡羅2017閱讀 134,704評(píng)論 18 139
  • 2.2 子曰:“《詩(shī)》三百喷市,一言以蔽之相种,曰‘思無(wú)邪’。” 孔子說(shuō):“《詩(shī)經(jīng)》三百篇寝并,用一句話來(lái)概括它箫措,就是‘思想純...
    須彌兒閱讀 301評(píng)論 0 0
  • 那些年,你我手拉著手仰望藍(lán)天白云衬潦,背靠著背沐浴冬日暖陽(yáng)斤蔓,你騎著單車(chē)載著我游遍大街小巷,我輕拉著你的衣角為你獻(xiàn)上最動(dòng)...
    左安520184閱讀 374評(píng)論 0 1