Java異常
一、異常繼承結構
Error錯誤,一般指虛擬機器相關的問題,如系統崩潰、虛擬機器出錯誤等,應用程式無法處理這些錯誤
一般說的異常處理指的是Exception
二、使用finally回收資源
除非在try塊、catch塊中呼叫了退出虛擬機器的方法(System.exit(0)),否則不管在try塊、catch塊中執行怎樣的程式碼,出現怎樣的情況,異常處理的finally總會被執行
三、Checked異常和Runtime異常體系
不是RuntimeException類及其子類的異常被稱為Checked異常;
只有Java提供了Cheched異常,Checked異常體現了Java的設計哲學:沒有完善錯誤處理的程式碼根本不會被執行;
Checked異常的處理有兩種:(1)try....catch(2)定義方法時宣告丟擲該異常
四、使用throws丟擲異常
當前方法不知道應該如何處理這種異常,應該有上一級呼叫者處理;如果main方法不知道應該如何處理這種異常,也可以使用throws宣告丟擲異常,該異常將交給JVM進行處理(列印異常跟蹤站資訊、並終止程式執行)。 throws可以丟擲多個可能存在的異常
五、使用throw丟擲異常
當程式出現錯誤時,系統會自動丟擲異常;除此之外,Java也允許程式自行丟擲異常,自行丟擲異常使用throw語句完成,throw語句丟擲的不是異常類,而是一個異常例項,而且每次只能丟擲一個異常例項
try{
if("有錯誤"){//是應用程式錯誤,不是系統錯誤
throw new Exception("....");
}
}
catch(Exception e){
....
}
如果throw語句丟擲的異常是Checked異常,則該throw語句要麼處於try塊中,顯示抓捕該異常,要麼放在一個帶throws宣告丟擲的方法裡,即把該異常交給該方法的呼叫者處理finally塊裡面的程式碼什麼時候被執行?
(1)finally保證無論出現什麼情況,finally塊裡面的程式碼總會被執行,因此一般用來回收資源;
(2)當tr、catch都有return語句時,先執行finally裡面的程式碼,然後執行try裡面的return
finally塊是不是一定會執行?
不一定會執行。
(1)當程式進入try語句之前就有異常時,會直接結束
int i=5/0;//出現異常,沒有執行try塊
try{}
catch(){}
finally{}
(2)當程式在try塊中強制退出也不會去執行finally塊中的內容
try{
System.exit(0);
}
catch(){}
finally{}//finally塊沒有被執行
Error與Exception的區別
Error表示程式在執行期間出現了非常嚴重的錯誤,並且錯誤是不可以恢復的,屬於JVM層次的嚴重錯誤,編譯器不會去檢查Error是否被處理,會導致程式終止執行。如OutOfMemoryError、ThreadDeath等錯誤; Exception表示可以恢復的異常,是編譯器可以捕捉到的,包括Runtime exception和Checked exception
checked異常和Runtime異常的區別
checked 異常也就是我們經常遇到的IO異常,以及SQL異常都是這種異常。對於這種異常,JAVA編譯器強制要求我們必需對出現的這些異常進行catch。所以,面對這種異常不管我們是否願意,只能自己去寫一大堆catch塊去處理可能的異常。
runtime exception,也稱執行時異常,我們可以不處理。當出現這樣的異常時,總是由虛擬機器接管。出現執行時異常後,系統會把異常一直往上層拋,一直遇到處理程式碼。如果沒有處理塊,到最上層,如果是多執行緒就由Thread.run()丟擲,如果是單執行緒就被main()丟擲。丟擲之後,如果是執行緒,這個執行緒也就退出了。如果是主程式丟擲的異常,那麼這整個程式也就退出了。
如果不想終止,則必須撲捉所有的執行時異常,決不讓這個處理執行緒退出。佇列裡面出現異常資料了,正常的處理應該是把異常資料捨棄,然後記錄日誌。不應該由於異常資料而影響下面對正常資料的處理。在這個場景這樣處理可能是一個比較好的應用,但並不代表在所有的場景你都應該如此。如果在其它場景,遇到了一些錯誤,如果退出程式比較好,這時你就可以不太理會執行時異常,或者是通過對異常的處理顯式的控制程式退出。
相關文章
- 【java】異常Java
- java 異常Java
- Java 異常Java
- 異常JavaJava
- Java 異常(二) 自定義異常Java
- jmu-Java-06異常-01-常見異常Java
- Java 異常表與異常處理原理Java
- Java 異常(一) 異常概述及其架構Java架構
- Java 異常進階Java
- Java 筆記《異常》Java筆記
- 如何善用Java異常Java
- Java異常機制Java
- Java基礎-異常Java
- JAVA 異常處理Java
- Java自定義異常Java
- Java基礎 — 異常Java
- java異常體系Java
- Java - 異常與FileJava
- [Java基礎]異常Java
- Java異常型別Java型別
- java中的異常Java
- Java 異常處理Java
- JAVA異常處理Java
- Java 中的異常Java
- Java之常見異常 整理集合Java
- JAVA_異常處理Java
- Java異常使用原則Java
- 深入理解Java異常Java
- Java之自定義異常Java
- java異常練習題Java
- Java_異常介紹Java
- java微服務的異常Java微服務
- 對Java異常的理解Java
- JAVA異常和日誌Java
- Java異常體系概述Java
- DataIntegrityViolationException異常:java利用mymatis連線資料庫異常AIExceptionJava資料庫
- Java常見知識點彙總(⑨)——異常Java
- Java異常處理(非常全面)Java