您好,登錄后才能下訂單哦!
這篇文章的知識點包括:異常處理的簡介、異常處理的工作機制以及異常處理的使用,閱讀完整文相信大家對java8中的異常處理有了一定的認識。
Error:Java虛擬機無法解決的嚴重問題:
JVM系統內部錯誤,資源耗盡,如:StackOverflow \OOM堆棧溢出
處理辦法:只能修改代碼,不能編寫處理異常的代碼
Exception:可以處理的異常
(1)空指針訪問
(2)試圖讀取不存在的文件
(3)網絡連接中斷
(4)數組角標越界
處理異常的最佳時間:編譯期間
編譯時異常----受檢異常-----更嚴重,執行javac.exe命令時可能出現的異常
運行時異常---非受檢異常---執行java.exe命令時,出現的異常---一般也不用try-catch處理(實際開發中)
異常的體系結構:
常見的異常類型,舉例說明:
/* **************運行時異常************ */
@Test
//ArithmeticException
public void test1(){
int a=2;
int b=0;
System.out.println(a/b);
}
@Test
//InputMismatchException
public void test2(){
Scanner scanner=new Scanner(System.in);
int score=scanner.nextInt();
System.out.println(score);
scanner.close();
}
@Test
//NullPointerException
public void test3(){
int[] num=null;
System.out.println(num[3]);
String str=null;
System.out.println(str.length());
}
@Test
//ArrayIndexOutOfBoundsException
//StringIndexOutOfBoundException
public void test4(){
int[] num = new int[2];
System.out.println(num[3]);
String str="abc";
System.out.println(str.charAt(5));
}
@Test
//ClassCastException
public void test5(){
Object obj=new Date();
System.out.println(obj);
String str=(String)obj;
}
@Test
//NumberFormatException
public void test6(){
String str="abc";
System.out.println(Integer.valueOf(str));
}
拋——程序在正常執行的過程中, 一旦出現異常,會產生并拋出一個異常類的對象,之后代碼不執行
關于異常類對象的產生:(1)系統自動生成的異常對象
(2)手動生成一個異常對象并拋出throw new 異常名();
抓——處理異常的方式
(1)try-catch-finally
(2)throws 往外拋,最多拋到main就要處理
try{
// 可能產生異常的代碼
}catch(異常類型1 變量名1){
//處理異常的方式1
}catch(異常類型2 變量名2){
//處理異常的方式2
}finally{
//一定會執行的代碼
}
說明:
(1)finally是可以省略的
(2)使用try將可能產生異常的代碼包裝起來,一旦出現異常,就會生成一個對應的異常類對象
根據此對象的類型,去catch中進行匹配
(3)一旦try中的異常對象匹配到某一個catch,就會進入catch中進行異常的處理,一旦處理完成,
就跳出當前的try-catch結構(在沒有寫finally時),繼續執行其后的代碼
(4)catch中的異常類型如果沒有子父類關系,則誰聲明在上,在下無所謂
catch中的異常類型如果滿足子父類關系,則要求子類一定聲明在父類的上面,否則會報錯
(5)常用的異常對象處理方式:
①String getMessage()
②e.printStackTrace()
(6)在try結構中聲明的變量,出了try結構以后,就不能再被調用
finally的認識
(1)finally中聲明的語句是一定會被執行的代碼,即使catch中又出現了異常,try中有return,catch種有return語句等
(2)finally中的語句會在所有return語句執行前被執行
finally中如果有return,直接執行finally中的return
(3)finally的使用場景:
像數據庫連接、輸入輸出流、網絡編程Socket等資源,
JVM是不能自動回收的,需要手動進行資源釋放,就需要聲明在finally中
體會:
(1)使用try-catch-finally處理編譯時異常,使得程序在編譯時不再報錯,但運行時仍可能報錯
相當于shiyongtry-catch-finally將一個編譯時可能出現的異常,延遲到運行時出現
(2)開發中,由于運行時異常比較常見,所以通常不針對運行時異常編寫try-catch-finally
編譯時異常,一定要考慮異常處理
寫在方法的聲明處,指明此方法執行時,可能會拋出的異常類型。一旦當方法體執行時,出現異常,仍會在
異常代碼處生成一個異常類的對象,此對象滿足throws后的異常類型時,就會被拋出。異常代碼后續的代碼不會再執行。
try-cathch-finally:真正將異常處理掉了
throws+異常類型:只是將異常拋給了方法的調用者,并沒有真正將異常處理掉
體會
(1)父類沒有拋出異常,子類也不能拋異常
(2)子類拋出的異常不大于父類拋出的異常
(1)如果父類中被重寫的方法沒有throws處理異常,則子類重寫方法也不能用throws
只能用try-catch-finally
(2)執行的方法中,先后調用了另外幾個方法,這幾個被調用的方法是遞進關系執行的,
建議使用throws處理這幾個方法,執行方法使用try-catch-finally
1.運行時異常可以不在方法聲明里throws
2.編譯時異常需要在方法聲明中拋出
1.繼承現有的異常體系結構RuntimeException,Exception
2.提供序列版本號
3.提供重載的構造器
throw:拋出一個異常類的對象,生成異常對象的過程聲明在方法體內
throws:屬于異常處理的一種方式,在方法聲明處聲明
看完上述內容,你們對java8中的異常處理有進一步的了解嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。