2019-08-21

1.8 違例控制:解決錯(cuò)誤

從最古老的程序設(shè)計(jì)語(yǔ)言開(kāi)始,錯(cuò)誤控制一直都是設(shè)計(jì)者們需要解決的一個(gè)大問(wèn)題。由于很難設(shè)計(jì)出一套完美的錯(cuò)誤控制方案,許多語(yǔ)言干脆將問(wèn)題簡(jiǎn)單地忽略掉,將其轉(zhuǎn)嫁給庫(kù)設(shè)計(jì)人員。對(duì)大多數(shù)錯(cuò)誤控制方案來(lái)說(shuō),最主要的一個(gè)問(wèn)題是它們嚴(yán)重依賴程序員的警覺(jué)性,而不是依賴語(yǔ)言本身的強(qiáng)制標(biāo)準(zhǔn)。如果程序員不夠警惕——若比較匆忙,這幾乎是肯定會(huì)發(fā)生的——程序所依賴的錯(cuò)誤控制方案便會(huì)失效。

“違例控制”將錯(cuò)誤控制方案內(nèi)置到程序設(shè)計(jì)語(yǔ)言中,有時(shí)甚至內(nèi)建到操作系統(tǒng)內(nèi)。這里的“違例”(Exception)屬于一個(gè)特殊的對(duì)象,它會(huì)從產(chǎn)生錯(cuò)誤的地方“扔”或“擲”出來(lái)。隨后,這個(gè)違例會(huì)被設(shè)計(jì)用于控制特定類型錯(cuò)誤的“違例控制器”捕獲。在情況變得不對(duì)勁的時(shí)候,可能有幾個(gè)違例控制器并行捕獲對(duì)應(yīng)的違例對(duì)象。由于采用的是獨(dú)立的執(zhí)行路徑,所以不會(huì)干擾我們的常規(guī)執(zhí)行代碼。這樣便使代碼的編寫(xiě)變得更加簡(jiǎn)單,因?yàn)椴槐亟?jīng)常性強(qiáng)制檢查代碼。除此以外,“擲”出的一個(gè)違例不同于從函數(shù)返回的錯(cuò)誤值,也不同于由函數(shù)設(shè)置的一個(gè)標(biāo)志。那些錯(cuò)誤值或標(biāo)志的作用是指示一個(gè)錯(cuò)誤狀態(tài),是可以忽略的。但違例不能被忽略,所以肯定能在某個(gè)地方得到處置。最后,利用違例能夠可靠地從一個(gè)糟糕的環(huán)境中恢復(fù)。此時(shí)一般不需要退出,我們可以采取某些處理,恢復(fù)程序的正常執(zhí)行。顯然,這樣編制出來(lái)的程序顯得更加可靠。

Java的違例控制機(jī)制與大多數(shù)程序設(shè)計(jì)語(yǔ)言都有所不同。因?yàn)樵贘ava中,違例控制模塊是從一開(kāi)始就封裝好的,所以必須使用它!如果沒(méi)有自己寫(xiě)一些代碼來(lái)正確地控制違例,就會(huì)得到一條編譯期出錯(cuò)提示。這樣可保證程序的連貫性,使錯(cuò)誤控制變得更加容易。
注意違例控制并不屬于一種面向?qū)ο蟮奶匦?,盡管在面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言中,違例通常是用一個(gè)對(duì)象表示的。早在面向?qū)ο笳Z(yǔ)言問(wèn)世以前,違例控制就已經(jīng)存在了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.7 對(duì)象的創(chuàng)建和存在時(shí)間 1.7 對(duì)象的創(chuàng)建和存在時(shí)間 從技術(shù)角度說(shuō),OOP(面向?qū)ο蟪绦蛟O(shè)計(jì))只是涉及抽象的...
    5e0g閱讀 323評(píng)論 0 1
  • 1.6 多形對(duì)象的互換使用 通常,繼承最終會(huì)以創(chuàng)建一系列類收?qǐng)?,所有類都建立在統(tǒng)一的接口基礎(chǔ)上。我們用一幅顛倒的樹(shù)...
    5e0g閱讀 399評(píng)論 0 1
  • 1.2 對(duì)象的接口 亞里士多德或許是認(rèn)真研究“類型”概念的第一人,他曾談及“魚(yú)類和鳥(niǎo)類”的問(wèn)題。在世界首例面向?qū)ο?..
    5e0g閱讀 247評(píng)論 0 1
  • 第1章 對(duì)象入門(mén) “為什么面向?qū)ο蟮木幊虝?huì)在軟件開(kāi)發(fā)領(lǐng)域造成如此震憾的影響?” 面向?qū)ο缶幊蹋∣OP)具有多方面的...
    5e0g閱讀 266評(píng)論 0 1
  • 1.4 方案的重復(fù)使用 創(chuàng)建并測(cè)試好一個(gè)類后,它應(yīng)(從理想的角度)代表一個(gè)有用的代碼單位。但并不象許多人希望的那樣...
    5e0g閱讀 145評(píng)論 0 1

友情鏈接更多精彩內(nèi)容