大家可以關(guān)注作者的賬號,關(guān)注從零開始學Java筆記文集。也可以根據(jù)目錄前往作者的博客園博客進行學習。本片文件將基于黑馬程序員就業(yè)班視頻進行學習以及資料的分享,并記錄筆記和自己的看法。歡迎大家一起學習和討論。
【從零開始學Java筆記】目錄
什么是異常?
異常是指不正常,我們在代碼的時候出現(xiàn)的編譯或者運行時的錯誤。我們在寫代碼的時候,經(jīng)常的出現(xiàn)一些小問題, 那么為了方便我們處理這些問題,java為我們提供了異常機制。異常包含了錯誤的類型、原因以及位置
異常的體系結(jié)構(gòu):
Throwable (最項層)
Error :出現(xiàn)的不能夠處理的嚴重問題
Exception:可以處理的問題
異常的處理方式
1.jvm處理異常的方式:
如果出現(xiàn)異常我們沒有處理,jvm會幫我們進行處理,他會把異常的類型,原因還有位置顯示在命令行,并且還終止了程序,異常后面的代碼將不在執(zhí)行。
2.捕獲處理
try...catch語句
格式:
try {
有可能出現(xiàn)問題的代碼;
} catch(ArithmeticException ae) {
處理異常;
}
try...catch的執(zhí)行順序:
首先執(zhí)行try語句,如果發(fā)現(xiàn)異常,異常下面的代碼不在執(zhí)行,直接跳入catch語句中,catch語句結(jié)束后,整個try...catch結(jié)束,如果沒有發(fā)現(xiàn)異常,try語句執(zhí)行結(jié)束后,try...catch直接結(jié)束, 不在執(zhí)行catch語句
3.拋出去
當我們不想處理異常,或者沒有能力處理的時候,我們可以選擇拋出異常,誰調(diào)用方法誰處理異常,使用關(guān)鍵字throws在方法的聲明出拋出異常
舉例:
import java.io.FileWriter;
import java.io.IOException;
public class ExceptionDemo2 {
public static void main(String[] args) throws Exception {
//method();
function();
}
public static void function() throws Exception {
FileWriter fw = new FileWriter("a.txt");
}
private static void method() {
try {
System.out.println(1);
//System.out.println(2 / 0);
System.out.println(2);
} catch(ArithmeticException ae) {
System.out.println("除數(shù)不能為0");
}
System.out.println(3);
}
}
處理多個異常
如何處理多個異常:
1.可以使用多個try.. .catch語句
2.使用一個try和多個catch
多個catch之間的順序:
多個catch之間可以有子父類
平級之間沒有順序關(guān)系
如果有子父類,父類異常必須放在后面
Throwable類
public class ExceptionDemo3 {
public static void main(String[] args) {
try {
System.out.println(2 / 0);
} catch (ArithmeticException e) {
// String getMessage() : 原因
// System.out.println(e.getMessage());
// String toString() 類型和原因
// System.out.println(e.toString());
// void printStackTrace():類型原因和位置,和jvm處理不同,不會終止程序運行
e.printStackTrace();
}
// System.out.println("hello");
}
}
finally
finally:組合try... catch使用,用于釋放資源等收尾工作,無論try...catch語句如何執(zhí)行,finally的代碼定會執(zhí)行,用于處理一些收尾工作,例如釋放資源
try {
有可能出現(xiàn)問題的代碼;
} catch(異常對象) {
處理異常;
} finally {
釋放資源;
清理垃圾;
}
異常的分類
運行時期異常: RuntimeException的子類就是運行時期異常,在編譯時期可以自由選擇處理或者不處理
編譯時期異常:是Exception的子類,非RuntimeExcpetion的子類,在編譯時期必須處理