1. 程式人生 > >Java異常處理和設計

Java異常處理和設計

  在程式設計中,進行異常處理是非常關鍵和重要的一部分。一個程式的異常處理框架的好壞直接影響到整個專案的程式碼質量以及後期維護成本和難度。試想一下,如果一個專案從頭到尾沒有考慮過異常處理,當程式出錯從哪裡尋找出錯的根源?但是如果一個專案異常處理設計地過多,又會嚴重影響到程式碼質量以及程式的效能。因此,如何高效簡潔地設計異常處理是一門藝術,本文下面先講述Java異常機制最基礎的知識,然後給出在進行Java異常處理設計時的幾個建議。

  若有不正之處,請多多諒解和指正,不勝感激。

  以下是本文的目錄大綱:

  一.什麼是異常
  二.Java中如何處理異常
  三.深刻理解try,catch,finally,throws,throw五個關鍵字
  四.在類繼承的時候,方法覆蓋時如何進行異常丟擲宣告
  五.異常處理和設計的幾個建議

一.什麼是異常                                                                              

  異常的英文單詞是exception,字面翻譯就是“意外、例外”的意思,也就是非正常情況。事實上,異常本質上是程式上的錯誤,包括程式邏輯錯誤和系統錯誤。比如使用空的引用、陣列下標越界、記憶體溢位錯誤等,這些都是意外的情況,背離我們程式本身的意圖。錯誤在我們編寫程式的過程中會經常發生,包括編譯期間和執行期間的錯誤,在編譯期間出現的錯誤有編譯器幫助我們一起修正,然而執行期間的錯誤便不是編譯器力所能及了,並且執行期間的錯誤往往是難以預料的。假若程式在執行期間出現了錯誤,如果置之不理,程式便會終止或直接導致系統崩潰,顯然這不是我們希望看到的結果。因此,如何對執行期間出現的錯誤進行處理和補救呢?Java提供了異常機制來進行處理,通過異常機制來處理程式執行期間出現的錯誤。通過異常機制,我們可以更好地提升程式的健壯性。

  在Java中異常被當做物件來處理,根類是java.lang.Throwable類,在Java中定義了很多異常類(如OutOfMemoryError、NullPointerException、IndexOutOfBoundsException等),這些異常類分為兩大類:Error和Exception。

  Error是無法處理的異常,比如OutOfMemoryError,一般發生這種異常,JVM會選擇終止程式。因此我們編寫程式時不需要關心這類異常。

  Exception,也就是我們經常見到的一些異常情況,比如NullPointerException、IndexOutOfBoundsException,這些異常是我們可以處理的異常。

  Exception類的異常包括checked exception和unchecked exception(unchecked exception也稱執行時異常RuntimeException,當然這裡的執行時異常並不是前面我所說的執行期間的異常,只是Java中用執行時異常這個術語來表示,Exception類的異常都是在執行期間發生的)。

  unchecked exception(非檢查異常),也稱執行時異常(RuntimeException),比如常見的NullPointerException、IndexOutOfBoundsException。對於執行時異常,java編譯器不要求必須進行異常捕獲處理或者丟擲宣告,由程式設計師自行決定。

  checked exception(檢查異常),也稱非執行時異常(執行時異常以外的異常就是非執行時異常),java編譯器強制程式設計師必須進行捕獲處理,比如常見的IOExeption和SQLException。對於非執行時異常如果不進行捕獲或者丟擲宣告處理,編譯都不會通過。

  在Java中,異常類的結構層次圖如下圖所示:

  

  在Java中,所有異常類的父類是Throwable類,Error類是error型別異常的父類,Exception類是exception型別異常的父類,RuntimeException類是所有執行時異常的父類,RuntimeException以外的並且繼承Exception的類是非執行時異常。

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

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

二.Java中如何處理異常                                                                 

   在Java中如果需要處理異常,必須先對異常進行捕獲,然後再對異常情況進行處理。如何對可能發生異常的程式碼進行異常捕獲和處理呢?使用try和catch關鍵字即可,如下面一段程式碼所示:

1 2 3 4 5 6 7 try { File file = new File("d:/a.txt"); if(!file.exists()) file.createNewFile(); catch (IOException e) { // TODO: handle exception }

  被try塊包圍的程式碼說明這段程式碼可能會發生異常,一旦發生異常,異常便會被catch捕獲到,然後需要在catch塊中進行異常處理。

  這是一種處理異常的方式。在Java中還提供了另一種異常處理方式即丟擲異常,顧名思義,也就是說一旦發生異常,我把這個異常丟擲去,讓呼叫者去進行處理,自己不進行具體的處理,此時需要用到throw和throws關鍵字。 

  下面看一個示例:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 public class Main { public static void main(String[] args) { try { createFile(); catch (Exception e) { // TODO: handle exception } } public static void createFile() throws IOException{ File file = new File("d:/a.txt"); if(!file.exists()) file.createNewFile(); }

相關推薦

Java異常處理設計

  在程式設計中,進行異常處理是非常關鍵和重要的一部分。一個程式的異常處理框架的好壞直接影響到整個專案的程式碼質量以及後期維護成本和難度。試想一下,如果一個專案從頭到尾沒有考慮過異常處理,當程式出錯從哪裡尋找出錯的根源?但是如果一個專案異常處理設計地過多,又會嚴重影響到程式碼質量以及程式的效能。因此,

Java 異常處理 Log4j 配置文件

images orm 信息 not bound img source jar 下標 一、 程序錯誤 警告:黃線:Warning 錯誤:資源類:系統級(線程)/ 環境級(繪圖) 異常:編譯級:Exception 運行級:Exception -> RuntimeExc

java 異常處理異常丟擲

1.錯誤種類:error 和 Exception都集成於一個父類,error通常是機器問題(希望不會出現),Excption則是程式問題。 2.Exception分為RuntimeEcception和非RuntimeEcception, RuntimeEception可以

Java 異常處理的誤區經驗總結

ORC 進一步 相關 ror final 額外 檢測 業務 清理資源 一 異常分檢測異常和非檢測異常,異常的應用情景可以概括為以下: 調用代碼不能繼續執行,需要立即終止。出現這種情況的可能性太多太多,例如服務器連接不上、參數不正確等。這些時候都適用非檢測異常,不需要調用

程序設計中關於Java 異常處理應註意的問題

異常處理 try...catch Java 異常處理初識 下面程序,雖能運行,但當數據輸入有誤時程序不能正常結束,也就是說,程序本身沒有進行異常處理。 例題001 用Java編寫程序。輸入兩個整數,輸出它們的商。 import java.util.Scanner;public class MyAd

java異常處理中的returnthrow

如果把return和throw放在一起,直接會提示錯誤。"Unreachable statement"(無法被執行). 然而finally卻可以成功騙過編譯器讓兩者並存(是不是可以算是編譯器的一個小bug呢),結果是後執行的會覆蓋前者。 finally如果有return會覆蓋cat

java——第十二章 異常處理文字I/O

1.異常處理: 使用try_throw_catch塊模組 優點:將檢測錯誤(由被呼叫的方法完成)從處理錯誤(由呼叫方法完成)中分離出來。 例子: 1 package test; 2 import java.util.Scanner; 3 public class Demo { 4 5

設計一個具有陣列越界的異常處理的程式,假設計算n個實數的,用陣列存放。分別採用3種異常處理方式設計程式

Java三種不同的異常處理方法 第一種:不處理,交給jvm處理 package chuki; import java.util.*; public class one { public static void main(String[] args) { int n, sum = 0

Java基礎:深入理解java異常處理機制的原理開發應用【轉載】

Java異常處理機制在日常開發中應用頻繁,本篇文章主要在基礎的使用方法上,更進一步的,如何更加合理的使用異常機制,希望可以對各位朋友能有所幫助。   Java異常處理機制其最主要的幾個關鍵字:try、catch、finally、throw、throws,以及各種各樣

java異常處理 Exception、error、執行時異常一般異常有何異同

一、開場白 對於程式執行過程中的可能出現異常情況,java語言使用一種稱為異常處理的錯誤捕捉機制進行處理。相信大家對 try { }catch( ){} finally{} 這種結構非常熟悉,使用頻率極高。既然經常使用它,而且也是面試常問知識點,我們就有必要去

Java異常處理終結篇——如何進行Java異常處理設計

有一句這樣話:一個衡量Java設計師水平和開發團隊紀律性的好方法就是讀讀他們應用程式裡的異常處理程式碼。 本文主要討論開發Java程式時,如何設計異常處理的程式碼,如何時拋異常,捕獲到了怎麼處理,而不是講異常處理的機制和原理。 在我自己研究Java異常處理之前,我查過

Java異常處理-2-JVM異常處理方式try catch處理異常

       前面我們大概瞭解了什麼是異常和為什麼要處理異常。這篇我們先通過了解JVM是如何預設處理異常,然後我們是如何主動去捕獲和處理異常的。1.JVM處理異常的方式      在Java中,Java

C++java異常處理中關於finally的區別

在java中,異常處理由try{}catch(){}finally{}組成,無論try中有沒有異常,try和catch中有沒有return,finally最終都會執行。而且finally中若有return,則此return和try、catch中的return相比

Python Java 異常處理對比

當你在編寫程式時,可能由於人為或其它因素導致發生異常後,如果不對異常處理,程式就無法繼續執行。Python語言中也有自己的異常處理,下面我們先看下Java中的異常處理,然後再對比Python中的異常處理,其實它們都大同小異。java 中的異常處理我們不做過多介紹

java 異常分類處理機制

    一、背景介紹       程式在執行過程中發生錯誤或異常情況是不可避免的,如果每一個執行時錯誤都由程式設計師手動控制和處理,其工作量是不可想象的。     Java語言中的異常處理機制就解決的上述問題,把錯誤與異常的管理帶到了面向物件的世界Java語言定義了很多異常類

JAVA異常處理原則log4j輸出詳細異常分析

1.多用try,catch;不要一個try,catch包含所有內容    好處:不同模組抓取不同異常,某一模組異常掛了,不影響其他模組的程式的進行 2.多寫幾個catche;儘量不要使用Except

java異常處理之throw, throws,trycatch

    程式執行過程中可能會出現異常情況,比如被0除、對負數計算平方根等,還有可能會出現致命的錯誤,比如記憶體不足,磁碟損壞無法讀取檔案等,對於異常和錯誤情況的處理,統稱為異常處理。    Java異常處理主要通過5個關鍵字控制:try、catch、throw、throws和

重構機房收費系統你要用的——異常處理拋出異常(try catch finally)——(vb.net)

style post blue 通過 alt list bcm round 導致 你能保證你的程序不會出問題嗎? 不能 當你的程序執行到某個地方發生了你不想要的結果。你是否想讓它一錯再錯? 不想 你是否想讓你的程序占著茅坑不拉屎? 不想 你是否想知道你的程序出錯的原因?

15. Java異常處理

ace hover 避免 構造函數 裏的 width 原因 sans 克隆對象 html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,addre

java異常處理

並不是 9.png 代碼塊 可能 函數 處理異常 finall int 將不 一 異常: 是指程序運行的過程中,發生某些意外的事情,比如10除以0, 文件不存在等。 例如: pub