在Java語言中,我們用異常物件來表示不同的異常。
所謂Java異常物件就是一個存放著相關錯誤資訊的物件,如果方法執行時產生了異常,該方法就可以丟擲一個異常物件
為了表示不同種類的異常,Java語言中定義了許多異常類。
什麼是異常 有異於常態,和正常情況不一樣,有錯誤出現,阻止當前方法或作用域,稱之為異常。
非檢察異常:
1.空指標異常(NullPointerException)
2.陣列下標越界異常ArrayIndexOutOfBoundsException
3.型別轉換異常(ClassCastException)
4.算術異常(ArithmeticExcetion)
在Java語言中,任何的異常物件都是Throwable類的直接子類或間接子類的例項。Java的類庫已經提供了一些常見的異常類,如果這些異常類不能夠滿足要求,使用者也可以建立自己的異常類。
**常見的而異常類**
複製程式碼
- ArithmeticException
- ArrayIndexOutOfBandsException
- IOException
- FileNotFoundException
- NullPointerException
- NumberFormatException
Error類表示Java執行時產生的系統內部錯誤或資源耗盡等嚴重錯誤。 這種錯誤通常是程式無法控制和解決的,如果發生這種錯誤,通常的做法是通知使用者並中止程式的執行。
常見的錯誤類
- NoClassDefFoundError
- OutOfMemoryError
- VirtualMachineError
異常丟擲格式1
<訪問許可權修飾符> <返回值型別> <方法名>(引數列表) throws 異常列表
public void troubleSome() throws IOException
複製程式碼
異常丟擲格式2
try{
丟擲異常的程式碼
}catch (某Exception型別 e){
處理該異常型別的程式碼
}catch (某Exception型別 e){
處理該異常型別的程式碼
}finally{錯誤也執行的程式碼
複製程式碼
}
異常處理練習一
程式碼1:
try{
System.out.println("請輸入整數");
Scanner scanner = new Scanner(System.in);
int age = scanner.nextInt();
System.out.println("十年後你"+(age + 10) + "歲");
}catch (Exception e){
System.out.println("你應該輸入整數");
}
System.out.println("程式結束啦");
多型別處理:
複製程式碼
try{
System.out.println("請輸入整數");
Scanner scanner = new Scanner(System.in);
int age = scanner.nextInt();
System.out.println("十年後你"+(age + 10) + "歲");
}catch (InputMismatchException e){
System.out.println("你應該輸入整數");
}catch (ArithmeticException e){
System.out.println("除數不能為0");
}
System.out.println("程式結束啦");
複製程式碼
異常來順序是 先子類後父類(必須這樣子)
finally
當一個方法的某條語句丟擲異常後,該方法剩餘的語句將無法繼續執行。這種情況下,方法往往無法將其佔用的資源進行釋放。 解決方法: 在每個catch子句的異常處理程式碼中也加上資源釋放的程式碼,但這種方法非常麻煩; Java語言的異常處理機制中提供了一個更好的方案-程式設計師可以使用finally子句來統一進行資源釋放之類的工作。
程式碼如下; try{
System.out.println("請輸入整數");
Scanner scanner = new Scanner(System.in);
int age = scanner.nextInt();
System.out.println("十年後你"+(age + 10) + "歲");
}catch (InputMismatchException e){
System.out.println("你應該輸入整數");
}
**finally** {
System.out.println("*********** 我就要執行 *********");
}
System.out.println("程式結束啦");
複製程式碼