java里的異常多種多樣,這是一種非常有用的機制,它能幫助我們處理那些我們未知的錯誤,在java里,關于異常的有throw throws,還有一個try catch 程序塊。接下來我們挨個看看這幾個的作用。
1.throw
throw 就是拋出一個異常,并獲取這個異常的引用,這個異常會被拋到外部的環(huán)境,由外部環(huán)境進行處理
class A{
public void func() throws Exception{
throw new Exception();
}
}
這里拋出了一個Exception,Exception是throwable的子類,是所有異常的基類。與此同時,throwable還有另一個子類,也就是Error。
這里會把Exception這個引用拋到外部環(huán)境中去處理。
throw跟try...catch...finally的對比:
public class ZeroTest {
public static void main(String[] args) {
try{
int i = 100/ 0;
System.out.print(i);
}catch(Exception e){
System.out.print(1);
throw new RuntimeException();
}finally{
System.out.print(2);
}
System.out.print(3);
}
}
try catch是直接處理,處理完成之后程序繼續(xù)往下執(zhí)行,throw則是將異常拋給它的上一級處理,程序便不往下執(zhí)行了。
本題的catch語句塊里面,打印完1之后,又拋出了一個RuntimeException,程序并沒有處理它,而是直接拋出,
因此執(zhí)行完finally語句塊之后,程序終止了
首先執(zhí)行try,遇到算術異常,拋出,執(zhí)行catch,打印1,然后拋出RuntimeException,緩存異常,執(zhí)行finally,打印2,然后拋出RuntimeException。
如果catch中沒有拋出RuntimeException,則執(zhí)行結果為123。
2.throws
那我們就不得不說一下throws,其實throws并不是拋出一個實際的Exception而是一個異常聲明,它聲明這個方法可能會拋出一個異常,注意是可能,所以在沒有異常的情況下也是可以用throws的,而throws本身的作用也是用來提高程序的健壯性,反過來,如果這個方法的的確確的有一個異常,那么編譯器會強制讓你加上throws這個異常聲明。
通常throws是寫在參數列表的后面,這樣就表明這個方法有可能會拋出一個異常
class A{
public void func() throws Exception{
throw new Exception();
}
public void g() throws Exception{
}
}
3.try...catch
當我們在其環(huán)境中調用func 和 g的時候,編譯器會通知我們需要用一個Try catch程序塊來處理這個異常。
這個程序塊分兩塊,第一塊是try{} ,第二塊是catch(exception的引用){}
try這個程序塊很有意思,因為它的名字很易懂,就是嘗試,嘗試能不能正常的走完整個作用域,如果不能則拋出一個異常。所以我們在try塊里經常放上可能會拋出異常的程序段。
而catch恰好就是處理try里拋出來的異常,其中catch的參數列表接收的是一個異常的引用,是throw拋出來的異常的引用,這樣我們就可以得到這個異常的對象,倒不如說我們是得到來了這個異常對象的引用,因為在java里,通常我們也只能通過引用來操縱對象。
PS:當 throw new RuntimeException的時候,不用throws
public class Main {
public static void main(String[] args){
A a = new A();
try{
a.func();
a.g();
}
catch(Exception e){
System.out.println("捕獲了一個異常");
}
}
}
我們捕獲了func 的異常,因為我們明確的指明func 會拋出一個異常throw new Exception();所以我們這里也會捕獲到,并去處理它,所以運行起來我們會看到控制臺上會打印“捕獲了一個異常”。
盡管g()沒有拋出任何的異常,編譯器還是要求我們要用try catch把它括起來,是因為它擁有一個throws 異常說明。
**下面是常見的幾種異常,供大家參考:
輸入輸出異常:IOException
算術異常類:ArithmeticExecption
空指針異常類:NullPointerException
類型強制轉換異常:ClassCastException
操作數據庫異常:SQLException
文件未找到異常:FileNotFoundException
數組負下標異常:NegativeArrayException
數組下標越界異常:ArrayIndexOutOfBoundsException
違背安全原則異常:SecturityException
文件已結束異常:EOFException
字符串轉換為數字異常:NumberFormatException
方法未找到異常:NoSuchMethodException
2019-04-29異常throw和try catch和finally的對比
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
相關閱讀更多精彩內容
- 異常的概述 異常概述異常就是Java程序在運行過程中出現的錯誤。 由來問題也是現實生活中一個具體事務,也可以通過j...
- java異常概念 java異常分類 異常的捕獲和處理 運行期出現的錯誤是最難解決的. 觀察錯誤名字和行號最重要! ...
- Java 的基本理念是 “結構不佳的代碼不能運行” 錯誤回復在我們編寫的每個程序中都是基本的元素 Java 的主要...
- 難度 初級 學習時間 10分鐘 適合人群 零基礎 開發(fā)語言 Java 開發(fā)環(huán)境 JDK v11 IntelliJ ...