在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

您好,歡迎來(lái)電子發(fā)燒友網(wǎng)! ,新用戶?[免費(fèi)注冊(cè)]

您的位置:電子發(fā)燒友網(wǎng)>源碼下載>java源碼下載>

java異常處理設(shè)計(jì)和一些建議

大小:0.3 MB 人氣: 2017-09-28 需要積分:1

  程序設(shè)計(jì)在程序設(shè)計(jì)中,進(jìn)行異常處理是非常關(guān)鍵和重要的一部分。一個(gè)程序的異常處理框架的好壞直接影響到整個(gè)項(xiàng)目的代碼質(zhì)量以及后期維護(hù)成本和難度。試想一下,如果一個(gè)項(xiàng)目從頭到尾沒(méi)有考慮過(guò)異常處理,當(dāng)程序出錯(cuò)從哪里尋找出錯(cuò)的根源?但是如果一個(gè)項(xiàng)目異常處理設(shè)計(jì)地過(guò)多,又會(huì)嚴(yán)重影響到代碼質(zhì)量以及程序的性能。因此,如何高效簡(jiǎn)潔地設(shè)計(jì)異常處理是一門藝術(shù),本文下面先講述Java異常機(jī)制最基礎(chǔ)的知識(shí),然后給出在進(jìn)行Java異常處理設(shè)計(jì)時(shí)的幾個(gè)建議。

  若有不正之處,請(qǐng)多多諒解和指正,不勝感激。

  以下是本文的目錄大綱:

  一。什么是異常

  二.Java中如何處理異常

  三。深刻理解try,catch,finally,throws,throw五個(gè)關(guān)鍵字

  四。在類繼承的時(shí)候,方法覆蓋時(shí)如何進(jìn)行異常拋出聲明

  五。異常處理和設(shè)計(jì)的幾個(gè)建議

  一。什么是異常

  異常的英文單詞是exception,字面翻譯就是“意外、例外”的意思,也就是非正常情況。事實(shí)上,異常本質(zhì)上是程序上的錯(cuò)誤,包括程序邏輯錯(cuò)誤和系統(tǒng)錯(cuò)誤。比如使用空的引用、數(shù)組下標(biāo)越界、內(nèi)存溢出錯(cuò)誤等,這些都是意外的情況,背離我們程序本身的意圖。錯(cuò)誤在我們編寫程序的過(guò)程中會(huì)經(jīng)常發(fā)生,包括編譯期間和運(yùn)行期間的錯(cuò)誤,在編譯期間出現(xiàn)的錯(cuò)誤有編譯器幫助我們一起修正,然而運(yùn)行期間的錯(cuò)誤便不是編譯器力所能及了,并且運(yùn)行期間的錯(cuò)誤往往是難以預(yù)料的。假若程序在運(yùn)行期間出現(xiàn)了錯(cuò)誤,如果置之不理,程序便會(huì)終止或直接導(dǎo)致系統(tǒng)崩潰,顯然這不是我們希望看到的結(jié)果。因此,如何對(duì)運(yùn)行期間出現(xiàn)的錯(cuò)誤進(jìn)行處理和補(bǔ)救呢?Java提供了異常機(jī)制來(lái)進(jìn)行處理,通過(guò)異常機(jī)制來(lái)處理程序運(yùn)行期間出現(xiàn)的錯(cuò)誤。通過(guò)異常機(jī)制,我們可以更好地提升程序的健壯性。

  在Java中異常被當(dāng)做對(duì)象來(lái)處理,根類是java.lang.Throwable類,在Java中定義了很多異常類(如OutOfMemoryError、NullPointerException、IndexOutOfBoundsException等),這些異常類分為兩大類:Error和Exception。

  Error是無(wú)法處理的異常,比如OutOfMemoryError,一般發(fā)生這種異常,JVM會(huì)選擇終止程序。因此我們編寫程序時(shí)不需要關(guān)心這類異常。

  Exception,也就是我們經(jīng)常見(jiàn)到的一些異常情況,比如NullPointerException、IndexOutOfBoundsException,這些異常是我們可以處理的異常。

  Exception類的異常包括checked exception和unchecked exception(unchecked exception也稱運(yùn)行時(shí)異常RuntimeException,當(dāng)然這里的運(yùn)行時(shí)異常并不是前面我所說(shuō)的運(yùn)行期間的異常,只是Java中用運(yùn)行時(shí)異常這個(gè)術(shù)語(yǔ)來(lái)表示,Exception類的異常都是在運(yùn)行期間發(fā)生的)。

  unchecked exception(非檢查異常),也稱運(yùn)行時(shí)異常(RuntimeException),比如常見(jiàn)的NullPointerException、IndexOutOfBoundsException。對(duì)于運(yùn)行時(shí)異常,java編譯器不要求必須進(jìn)行異常捕獲處理或者拋出聲明,由程序員自行決定。

  checked exception(檢查異常),也稱非運(yùn)行時(shí)異常(運(yùn)行時(shí)異常以外的異常就是非運(yùn)行時(shí)異常),java編譯器強(qiáng)制程序員必須進(jìn)行捕獲處理,比如常見(jiàn)的IOExeption和SQLException。對(duì)于非運(yùn)行時(shí)異常如果不進(jìn)行捕獲或者拋出聲明處理,編譯都不會(huì)通過(guò)。

  在Java中,異常類的結(jié)構(gòu)層次圖如下圖所示:

  java異常處理設(shè)計(jì)和一些建議

  在Java中,所有異常類的父類是Throwable類,Error類是error類型異常的父類,Exception類是exception類型異常的父類,RuntimeException類是所有運(yùn)行時(shí)異常的父類,RuntimeException以外的并且繼承Exception的類是非運(yùn)行時(shí)異常。

  典型的RuntimeException包括NullPointerException、IndexOutOfBoundsException、IllegalArgumentException等。

  典型的非RuntimeException包括IOException、SQLException等。

  二.Java中如何處理異常 在Java中如果需要處理異常,必須先對(duì)異常進(jìn)行捕獲,然后再對(duì)異常情況進(jìn)行處理。如何對(duì)可能發(fā)生異常的代碼進(jìn)行異常捕獲和處理呢?使用try和catch關(guān)鍵字即可,如下面一段代碼所示:

  try { File file= new File( “d:/a.txt”); if(! file. exists()) file.createNewFile(); } catch(IOException e) { // TODO: handle exception}

  被try塊包圍的代碼說(shuō)明這段代碼可能會(huì)發(fā)生異常,一旦發(fā)生異常,異常便會(huì)被catch捕獲到,然后需要在catch塊中進(jìn)行異常處理。

  這是一種處理異常的方式。在Java中還提供了另一種異常處理方式即拋出異常,顧名思義,也就是說(shuō)一旦發(fā)生異常,我把這個(gè)異常拋出去,讓調(diào)用者去進(jìn)行處理,自己不進(jìn)行具體的處理,此時(shí)需要用到throw和throws關(guān)鍵字。

  下面看一個(gè)示例:

  publicclassMain { publicstaticvoidmain(String[] args) { try{ createFile(); } catch(Exception e) { // TODO: handle exception} } publicstaticvoidcreateFile() throws IOException{ File file = newFile( “d:/a.txt”); if(!file.exists()) file.createNewFile(); } }

  這段代碼和上面一段代碼的區(qū)別是,在實(shí)際的createFile方法中并沒(méi)有捕獲異常,而是用throws關(guān)鍵字聲明拋出異常,即告知這個(gè)方法的調(diào)用者此方法可能會(huì)拋出IOException。那么在main方法中調(diào)用createFile方法的時(shí)候,采用try…catch塊進(jìn)行了異常捕獲處理。

  當(dāng)然還可以采用throw關(guān)鍵字手動(dòng)來(lái)拋出異常對(duì)象。下面看一個(gè)例子:

  publicclassMain { publicstaticvoidmain(String[] args) { try{ int[] data = newint[]{ 1, 2, 3}; System. out.println(getDataByIndex(- 1,data)); } catch(Exception e) { System.out.println(e.getMessage()); } } publicstaticintgetDataByIndex( intindex, int[] data) {if(index《 0||index》=data.length) thrownewArrayIndexOutOfBoundsException( “數(shù)組下標(biāo)越界”); returndata[index]; } }

  然后在catch塊中進(jìn)行捕獲。

  也就說(shuō)在Java中進(jìn)行異常處理的話,對(duì)于可能會(huì)發(fā)生異常的代碼,可以選擇三種方法來(lái)進(jìn)行異常處理:

  1)對(duì)代碼塊用try..catch進(jìn)行異常捕獲處理;

  2)在 該代碼的方法體外用throws進(jìn)行拋出聲明,告知此方法的調(diào)用者這段代碼可能會(huì)出現(xiàn)這些異常,你需要謹(jǐn)慎處理。此時(shí)有兩種情況:

  如果聲明拋出的異常是非運(yùn)行時(shí)異常,此方法的調(diào)用者必須顯示地用try..catch塊進(jìn)行捕獲或者繼續(xù)向上層拋出異常。

  如果聲明拋出的異常是運(yùn)行時(shí)異常,此方法的調(diào)用者可以選擇地進(jìn)行異常捕獲處理。

  3)在代碼塊用throw手動(dòng)拋出一個(gè)異常對(duì)象,此時(shí)也有兩種情況,跟2)中的類似:

  如果拋出的異常對(duì)象是非運(yùn)行時(shí)異常,此方法的調(diào)用者必須顯示地用try..catch塊進(jìn)行捕獲或者繼續(xù)向上層拋出異常。

  如果拋出的異常對(duì)象是運(yùn)行時(shí)異常,此方法的調(diào)用者可以選擇地進(jìn)行異常捕獲處理。

  (如果最終將異常拋給main方法,則相當(dāng)于交給jvm自動(dòng)處理,此時(shí)jvm會(huì)簡(jiǎn)單地打印異常信息

非常好我支持^.^

(0) 0%

不好我反對(duì)

(0) 0%

      發(fā)表評(píng)論

      用戶評(píng)論
      評(píng)價(jià):好評(píng)中評(píng)差評(píng)

      發(fā)表評(píng)論,獲取積分! 請(qǐng)遵守相關(guān)規(guī)定!

      ?
      主站蜘蛛池模板: 边做饭边被躁欧美三级小说| 五月婷婷丁香在线观看| 国产精品久久久久久久免费| 立即播放免费毛片一级| 可以在线看黄的网站| 国产又爽又黄又粗又大| 2022国产情侣真实露脸在线| 在线观看视频网站| 91在线视频观看| 免费一区在线观看| 在线伊人网| 婷婷六月丁香| 欧美色综合久久| 韩国特黄特色a大片免费| www.色.com| 天天干免费视频| 精品午夜久久影视| 欧美性狂猛bbbbbbxxxx| 亚洲黄色在线网站| 一级黄免费| 日本色频| 黄色大片免费观看| 亚洲天天| 国产精品天天看| 又色又爽视频| 一级毛片aaaaaa视频免费看| 色天天综合久久久久综合片| 六月婷婷在线观看| vr亚洲成年网址在线观看| 天天插天天插天天插| 性欧美极品另类| 乱人伦小说短篇| 天堂网在线www| 久综合| 宅宅午夜亚洲精品| 看片在线观看免费| 亚洲一区二区影院| 婷婷激情四月| 好男人社区www在线资源视频| 午夜黄大色黄大片美女图片| 草久久久久|