Java面向對象中的異常
Java 中的異常機制,更好地提升程序的健壯性
throwable 為頂級, Error 和 Exception
Error :虛擬機錯誤,內存溢出,線程死鎖
Exception : RuntimeException 為空指針異常,數組下標越界異常,算數異常,類型轉換異常等,IO異常( IOException ),SQL異常( SQLException )。
異常處理,在 Java 中異常處理機制為: 拋出異常 和 捕捉異常
異常的描述:
class ExceptionDemo{
public static void main(String[] args){
int[] arr = new int[3];System.out.println(arr[0]);
// 結果 為 0
System.out.println(arr[3]);
// 結果 為 圖1
}
}
System.out.println(arr[3]); 編譯沒問題,語法沒有問題,編譯完內存中沒數組,運行的時候才在堆內存中開辟數組空間。 arr[3] 沒有這個下標,所以在運行時找不到結果。
圖1,表示數組下標越界異常, System.out.println(arr[3]); 運行時發生了異常為 ArrayIndexOutOfBoundException ,導致了程序無法運行,程序終結,不在執行。
錯誤的描述
class ExceptionDemo{
public static void main(String[] args){
int[] arr = new int[102410241024];
System.out.println(arr[0]);
// 結果 為 0
System.out.println(arr[3]);
// 結果 為 圖1
}
}
圖2,表示運行時發生的錯誤,堆內存溢出。
異常和錯誤的區別
對於異常是由解決方案的,Java中提供了對應的處理機制,而錯誤沒有,是沒有辦法去針對性的解決,唯一方法就是錯誤出現,修改代碼。
異常的過程
在異常情況,運行時發生的問題,是數組下標越界異常,在異常拋出的問題為名稱,內容,發生的位置等,多種信息進行了封裝到對象中。
ArrayIndexOutOfBoundsException
public class ArrayIndexOutOfBoundsException extends IndexOutOfBoundsException
構造方法
ArrayIndexOutOfBoundsException()
ArrayIndexOutOfBoundsException(int index)
ArrayIndexOutOfBoundsException(String s);
ArrayIndexOutOfBoundsException 可以 new 對象,有構造方法,就可以 new 對象。創建對象,如果遇到問題就拋出, new ArrayIndexOutOfBoundsException(index) 。
如何拋出呢?利用關鍵字 throw ,出現異常,在 Java 虛擬機, jvm 中需要把問題拋出,給調用者 main ,主函數收到拋出的異常對象,但主函數沒有辦法處理,繼續拋出調用者 jvm , jvm 收到異常問題後,將異常信息顯示在屏幕上。
異常概述(意外、例外)
什麽是異常呢?常見:
try-catch-finally
// try-catch-finally
public void method(){
try {
// 代碼段
// 產生異常的代碼段
}catch (異常類型 ex) {
// 對異常進行處理的代碼段
}finally{
// 代碼段
}
}
> throw
> throws
throws 聲明時要進行拋出的異常
throw 要手動將產生的異常拋出
> public void method() throws Exception1,Exception2,...,ExceptionN {
> // 產生異常代碼
> }
// throw new IOException();
// 自己拋出的問題自己進行異常解決。
// 在拋出異常處,通過throws關鍵字標明異常類型
public void method() throws 異常類型{
// 代碼 拋出
throw new 異常類型();
}自定義異常
異常鏈
異常處理分類為:
拋出異常
捕捉異常
簡單案例
public class Test{
public static void main(String[] args){
try{
String msg = redText(“C:\a.txt”);
}catch(PathNotExistException e){
// 進行處理
}
}
}
Throwable異常的頂級父類
異常 Exception 處理方式有兩種,一為 捕獲 ,二為 繼續拋出編譯時的異常 。
RuntimeException 運行時異常,只有在運行的時候才會出現,可以處理,也可以不處理。
自定義異常,可以自己定義異常,自己定義一個類,如果這個類繼承某個異常類,繼承的是 Exception 或其他異常,即定義了一個 編譯時異常 ,如果繼承的是運行時異常 RuntimeException 或是它的子類,就定義了一個 運行時異常 。
Throwable 類是 Java 中所有錯誤或異常的超類,只有當對象是這個類的實例時,能通過虛擬機或是 Java 中 throw 語句拋出。
Exception分為兩大類
非檢查異常( Unchecked Exception ):編譯器不要求強制處理異常
檢查異常( Checked Exception ):編譯器要求必須處理的異常,如 IO 異常等
捕獲異常
try
catch
finally
聲明異常,拋出異常
throws
throw
如果某方法出現了異常,卻是沒有能力的處理,可以在方法處用 throws 來聲明拋出異常,誰調用這個方法,誰就去處理這個異常。‘
public void method() throws Exception1,Exception2,...,ExceptionN {
// 異常的代碼
}Java中的異常處理情況
JAVA 異常
> try...catch...finally 結構的使用方法class Test{
public static void main(String args[]){try{
int i = 1 / 0;
}
catch(Exception e){
e.printStackTrace();
}
finally{
System.out.println("finally");
}
System.out.println(5);
}
}class Test{
public static void main(String args[]){
try{
Thread.sleep(1000);
}
catch(Exception e){
e.printStackTrace();
}
}
}
throw 和 throws 的作用區別:
class Person{
private int age;public void setAge(int age) throws Exception{
if(age<0){
RuntimeException e = new RuntimeException("年齡不能小於0");
throw e;
}
this.age = age;
}
}class Test{
public static void main(String args[]){
Person person = new Person();
try{
person.setAge(-1);
}
catch(Exception e){
System.out.println(e);
}
}
}
Error和Exception的區別
Error 是 Throwable 的子類,用於標記嚴重錯誤
Exception 是 Throwable 的子類,指示合理的程序想去 catch 的條件,非嚴重錯誤
try/catch的執行過程
如果出現異常,系統則會拋出一個異常,
進行捕捉( catch 操作),或在最後( finally )來進行處理。
throw和throws的區別
throws 出現在方法聲明上, throw 出現在方法體內。
異常分類
異常分類: 可查異常 , 運行時異常 和 錯誤
異常鏈
異常鏈為我們捕獲一個異常後再拋出另一個異常
one -> two -> three
Java面向對象中的異常