好程式設計師Java教程系列之異常定義
好程式設計師Java教程分享Java系列之異常定義
異常定義
異常:就是程式在執行的過程中遇到的種種不正常的情況。
特點:如果一個程式在執行中遇到了一個未經處理的異常,則這個異常會終止程式的執行。
但是如果程式出現的異常被處理了,此時程式不會被終止。所以我們需要知道怎麼去處理異常。
其實在Java中,異常也是一個類。
類的體系:
- Throwable: 是所有的異常的根類
- Error: 發生在編譯器級別的,我們程式無法處理的錯誤。
- Exception: 我們可以去處理的異常。
- RuntimeException:
異常的分類:可以分成兩種異常:
- 執行時異常(Runtime Exception)
- 發生在程式執行的過程中的異常。
- 如果不處理這種異常,程式可以正常編譯,但是當執行到異常產生的時候,會終止程式的執行。
- 例如:NullPointerException、IndexOutOfBoundsException、ArithmeticException…
- 非執行時異常(Non-Runtime Exception)
- 發生在程式編譯的過程中的異常。(編譯時異常)
- 如果不處理這種異常,程式將無法進行編譯。
- 例如:ParseException…
常用結構
需要使用語法: try-catch-finally
語法:
try {
// 這裡寫可能會產生異常的程式碼。
// 注意:
// 一旦這裡面的程式碼產生了異常,從異常產生開始往後所有try中的程式碼都不再執行,直接執行指定的catch
}
catch(需要捕獲的異常型別 識別符號) {
// 捕獲異常,如果try中產生的異常型別和我們要捕獲的異常型別匹配,此時會執行這個程式碼段中的內容
// 如果執行到這裡了,相當於這個異常被捕獲、處理了,這個異常將不再終止程式的執行。
}
finally {
// 這裡的程式碼始終會執行。
// 無論try中的程式碼有沒有異常產生,這裡的程式碼都會執行。
// 在這裡我們一般情況下是做一些資源釋放的工作。
}
備註:
以上,是完整的try-catch-finally語句。但是實際在用的時候,try後面可以只有catch, 也可只有finally,但是不能什麼都沒有。
一般情況下,catch我們是不會省略不寫的。
如果try中的程式碼可能產生的異常不止一種
- 如果需要對產生的不同異常進行不同的處理,可以使用多個catch語句
- 多個catch語句的先後順序
- 如果多個catch中的異常,沒有繼承關係,則先後順序沒有影響
- 如果多個catch中的異常,有繼承關係,則子類異常在前,父類異常在後
- 如果需要對某些異常做同樣的處理,可以在同一個catch中,用 | 拼接所有要處理的異常。
- 這些用|拼接起來的異常之間,不能有繼承關係
- 如果需要對所有的異常做同樣的處理,可以在一個catch中捕獲一個父類異常。
public static int show(int a, int b) { int c = 0; try { c = a / b; // 能走到這裡,說明上面的除沒有異常。 return c; } catch (ArithmeticException e) { System.out.println("出現了一個算術異常"); return c; } finally { // 在return之前,執行finally中的程式碼段 System.out.println("finally中的程式碼執行了"); c = -10; }}以上程式碼段,在try和catch中都有return語句。
finally中的程式碼始終會執行,但是針對這種情況,他的執行時機:
先執行return語句,此時,將需要返回的值快取起來。然後再去執行finally語句中的程式碼,執行結束後,返回剛才快取的那個值。
finally關鍵字的應用
throw和throws關鍵字
throw:
常用在某一個方法中,表示丟擲一個異常物件。等在呼叫這個方法的時候去處理這個異常。
一個異常物件被例項化完成後,不具備任何意義。只有被throw關鍵字丟擲了,才具備異常的功能。
throws:
- 常用在方法的宣告部分,用來描述這個方法可能會丟擲什麼異常,給呼叫這個方法的部分看的。
- 如果在方法中使用throw丟擲了一個Runtime Exception:
- throws可以寫,也可以不寫
- 備註:一般情況下,我們還是會按照實際情況進行描述的。
- 如果在方法中使用throw丟擲了一個Non-Runtime Exception:
- 此時throws必須寫
- 可以在方法中不去處理異常,將異常處理提到呼叫這個方法的時候。
注意:在方法重寫中
- 如果重寫的方法丟擲的是一個Non-Runtime Exception
- 子類方法丟擲的異常需要父類方法丟擲異常的子型別,或者等同於父類方法丟擲的異常型別
- 不能讓子類重寫的方法丟擲異常的型別高於父類方法丟擲的異常型別
自定義異常
系統給我們提供了很多的異常類,但是這些異常類並不能夠滿足我們所有的需求。這種情況下,我們就需要去自定義異常。繼承自異常類,寫一個子類即可。
自定義RuntimeException
繼承自RuntimeException類,寫一個子類。這個子類異常就是一個執行時異常。
class NumberOfLegException extends RuntimeException { /** * 透過一個異常描述資訊來例項化一個異常物件 * @param message */ public NumberOfLegException(String message) { // 怎麼樣去設定這個異常資訊? super(message); }}自定義Non-Runtime Exception
繼承自Exception類,寫一個子類。這個子類異常就是一個非執行時異常。
class NumberOfLegException extends Exception { /** * 透過一個異常描述資訊來例項化一個異常物件 * @param message */ public NumberOfLegException(String message) { // 怎麼樣去設定這個異常資訊? super(message); }}
在自定義異常類的時候,類名最好使用Exception作為結尾
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913892/viewspace-2668249/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 好程式設計師Java教程分享Java之設計模式程式設計師Java設計模式
- 好程式設計師Java實用教程系列之物件的轉型程式設計師Java物件
- 好程式設計師web前端教程JavaScript系列之HTTP程式設計師Web前端JavaScriptHTTP
- 好程式設計師Java教程分享:Java工程師常見面試題程式設計師Java工程師面試題
- 好程式設計師大資料教程Scala系列之類程式設計師大資料
- 好程式設計師Java教程分享XML常見面試題程式設計師JavaXML面試題
- 好程式設計師Java教程分享Java面試題之Hibernate程式設計師Java面試題
- 好程式設計師Java教程分享Vue外掛之Axios程式設計師JavaVueiOS
- 好程式設計師大資料教程Scala系列之繼承程式設計師大資料繼承
- 好程式設計師Java教程分享JavaScript常見面試題一程式設計師JavaScript面試題
- 好程式設計師Java教程分享JavaScript常見面試題五程式設計師JavaScript面試題
- 好程式設計師Java教程分享JavaScript常見面試題四程式設計師JavaScript面試題
- 好程式設計師Java教程分享JavaScript常見面試題三程式設計師JavaScript面試題
- 好程式設計師Java教程分享JavaScript常見面試題二程式設計師JavaScript面試題
- 好程式設計師Java教程分享Java難點解析之泛型程式設計師Java泛型
- 好程式設計師Java教程分享Java語法程式設計師Java
- 好程式設計師Java教程分享Java面試常見技術難題程式設計師Java面試
- 好程式設計師Java教程分享Java中經常出現的問題程式設計師Java
- 好程式設計師Java教程分享List介面程式設計師Java
- 好程式設計師Java教程分享javaweb框架程式設計師JavaWeb框架
- 好程式設計師大資料教程分享Scala系列之閉包程式設計師大資料
- 好程式設計師Java教程分享Java之包裝類與常用類程式設計師Java
- 好程式設計師Python教程系列分享之Python語言元素之運算子程式設計師Python
- 好程式設計師Python教程系列分享之Python語言元素之變數程式設計師Python變數
- 好程式設計師Java教程分享Java面試妙招程式設計師Java面試
- 好程式設計師Java教程分享Java開發工具程式設計師Java
- 好程式設計師Java教程分享Java多執行緒常見面試題程式設計師Java執行緒面試題
- Java之自定義異常Java
- 好程式設計師Java培訓分享Java處理異常的幾個小知識程式設計師Java
- 好程式設計師Java教程分享Java8.0新特性之Lambda表示式程式設計師Java
- 好程式設計師Python培訓分享Python異常處理程式設計師Python
- 好程式設計師Java教程分享Java開發主流框架程式設計師Java框架
- 好程式設計師Java教程分享Java 迴圈結構程式設計師Java
- 好程式設計師Java教程分享Jmeter效能測試程式設計師JavaJMeter
- 好程式設計師Java教程分享MyBatis Plus介紹程式設計師JavaMyBatis
- 好程式設計師Java教程:SQL語言之檢視程式設計師JavaSQL
- 好程式設計師Python培訓分享Python程式設計中常見的異常處理程式設計師Python
- 好程式設計師Python教程分享python之變數程式設計師Python變數