異常概述
異常:異常就是Java程序在運行過程中出現的錯誤。
異常由來:問題也是現實生活中一個具體事務,也可以通過java 的類的形式進行描述,并封裝成對象。其實就是Java對不正常情況進行描述后的對象體現。
我們見過的異常:角標越界異常、空指針異常。
異常分類圖解

異常舉例
- 除數為0
- 數組訪問越界
JVM的默認處理方案
- 把異常的名稱,錯誤原因及異常出現的位置等信息輸出在了控制臺
- 程序停止執行
異常處理方案
- try…catch…finally
- throws
try…catch處理方式
一個異常的情況
多個異常的情況
平級情況
存在上下級的情況
JDK7的新特性及注意事項
舉例
try {
int a = 10;
System.out.println(a / 2); // 可能拋出ArithmeticException()
} catch (ArithmeticException e) {
// 處理ArithmeticException
} finally {
// 無論try中的代碼是否出現問題,這里的代碼都會執行
System.out.println("好好學習,天天向上!");
}
編譯時異常和運行時異常的區別
Java中的異常被分為兩大類:編譯時異常和運行時異常。
- 編譯時異常:Java程序必須顯示處理,否則程序就會發生錯誤,無法通過編譯。
- 運行時異常:無需顯示處理,也可以和編譯時異常一樣處理。
finally的特點作用及面試題
finally的特點
- 被finally控制的語句體一定會執行。
- 特殊情況:在執行到finally之前JVM退出了(比如
System.exit(0))。
finally的作用
- 用于釋放資源,在IO流操作和數據庫操作中會見到。
finally相關的面試題
- final, finally和finalize的區別是什么?
- 如果catch里面有return語句,請問finally的代碼還會執行嗎?如果會,請問是在return前還是return后。
Throwable中的方法
getMessage():獲取異常信息,返回字符串。toString():獲取異常類名和異常信息,返回字符串。printStackTrace():獲取異常類名和異常信息,以及異常出現在程序中的位置。返回值void。printStackTrace(PrintStream s):通常用該方法將異常內容保存在日志文件中,以便查閱。
throws
定義功能方法時,需要把出現的問題暴露出來讓調用者去處理。那么就通過throws在方法上標識。
舉例
- 演示編譯時異常和運行時異常的拋出
throw
在功能方法內部出現某種情況,程序不能繼續運行,需要進行跳轉時,就用throw把異常對象拋出。
舉例
- 演示編譯時異常對象和運行時異常對象的拋出
throws和throw的區別
throws:用在方法聲明后面,跟的是異常類名。可以跟多個異常類名,用逗號隔開。表示拋出異常,由該方法的調用者來處理。throws表示出現異常的一種可能性,并不一定會發生這些異常。throw:用在方法體內,跟的是異常對象名。只能拋出一個異常對象名。表示拋出異常,由方法體內的語句處理。throw則是拋出了異常,執行throw則一定拋出了某種異常。
我們到底該如何處理異常呢
原則:如果該功能內部可以將問題處理,用try。如果處理不了,交由調用者處理,這是用throws。
- 后續程序需要繼續運行就
try。 - 后續程序不需要繼續運行就
throws。
舉例
- 感冒了就自己吃點藥就好了,
try。 - 吃了好幾天藥都沒好結果得了新冠,那就的得
throws到醫院。 - 如果醫院沒有特效藥就變成
Error了。
浙公網安備 33010602011771號