Java基礎學習之異常處理(6)
阿新 • • 發佈:2020-08-26
@目錄
1.異常是什麼
異常就是程式執行中可能會出現的錯誤,例如檔案找不到,網路超時等。
異常Exception的父類時Throwable,Throwable實現了Serializable可序列化,有兩個子類:Error和Exception。
1.1.Error
Error錯誤不是異常,是JVM本身的錯誤,無法通過程式碼處理。
後續的JVM相關文章中會說到,以及一些常見的Error和他們出現的情況,這裡不贅述了。
1.2.Exception
Exception即異常,程式執行時發生,可通過Java的異常處理機制處理。
Exception又分為檢查性異常和執行時異常。
檢查性異常:強制需要程式設計師進行處理的異常,例如IOException類。
執行時異常又稱非檢查性異常,例如RuntimeException類。
2.異常處理機制
Java中異常的處理過程一般是捕獲異常再處理。
2.1.捕獲異常
語法:
try {
//可能會發生異常的程式碼
} catch (Exception e) {
//異常處理
} finally {
//finally子塊
}
catch中的Exception為異常型別,多個catch子塊可以捕捉多個異常型別。finally子塊無論如何都會執行。
例如:
public class TestException {
public static void main(String[] args) {
try {
int i = 1/0;
} catch (Exception e) {
e.printStackTrace();
} finally {
System.out.println("finally");
}
}
}
執行結果:
2.2.丟擲異常
使用關鍵字throws將異常丟擲給執行時系統,由執行時系統處理異常。
例如:
public class TestException {
public static void main(String[] args) {
try {
test();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void test() throws Exception{
int i = 1/0;
}
}
執行結果:
3.自定義異常
之前有區分異常:
- 檢查性異常:繼承Exception類
- 執行時異常:繼承RuntimeException類
3.1.自定義檢查性異常
例如:網站註冊,使用者如果年齡低於18報出異常
public class MyException extends Exception {
public MyException() {
super();
}
public MyException(String msg) {
super(msg);
}
public static void main(String[] args) {
int age;
Scanner scanner = new Scanner(System.in);
System.out.println("請輸入你的年齡:");
try {
age = scanner.nextInt();
if (age < 18) {
throw new MyException("你未成年不能註冊");
}
} catch (MyException e) {
System.out.println(e.getMessage());
}
}
}
執行結果:
3.2.自定義執行時異常
例子和上面一樣,修改一些內容:
public class MyException extends RuntimeException {
public MyException() {
super();
}
public MyException(String msg) {
super(msg);
}
public static void main(String[] args) {
int age;
Scanner scanner = new Scanner(System.in);
System.out.println("請輸入你的年齡:");
age = scanner.nextInt();
if (age < 18) {
throw new MyException("你未成年不能註冊");
}
}
}
執行結果: