亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中使用throw-throws拋出異常如何解決

發布時間:2021-08-06 17:26:59 來源:億速云 閱讀:868 作者:Leah 欄目:開發技術

這篇文章將為大家詳細講解有關Java中使用throw-throws拋出異常如何解決,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

一、throws拋出異常

      如果一個方法可能會出現異常,但沒有能力處理這種異常,可以在方法聲明處用throws子句來聲明拋出異常。例如汽車在運行時可能會出現故障,汽車本身沒辦法處理這個故障,那就讓開車的人來處理。

      throws語句用在方法定義時聲明該方法要拋出的異常類型,如果拋出的是Exception異常類型,則該方法被聲明為拋出所有的異常。多個異常可使用逗號分割。throws語句的語法格式為:

 methodname throws Exception1,Exception2,..,ExceptionN{  }

      方法名后的throws Exception1,Exception2,…,ExceptionN 為聲明要拋出的異常列表。當方法拋出異常列表的異常時,方法將不對這些類型及其子類類型的異常作處理,而拋向調用該方法的方法,由他去處理。

      使用throws關鍵字將異常拋給調用者后,如果調用者不想處理該異常,可以繼續向上拋出,但最終要有能夠處理該異常的調用者。

Throws拋出異常的規則:

  1. 如果是不可查異常(unchecked exception),即Error、RuntimeException或它們的子類,那么可以不使用throws關鍵字來聲明要拋出的異常,編譯仍能順利通過,但在運行時會被系統拋出。

  2. 如果一個方法可能出現可查異常(checked exception),要么用try-catch語句捕獲,要么用throws子句聲明將它拋出,否則會導致編譯錯誤。

  3. 只有當拋出了異常時,該方法的調用者才必須處理或者重新拋出該異常。當方法的調用者無力處理該異常的時候,應該繼續拋出。

  4. 調用方法必須遵循任何可查異常的處理和聲明規則。若覆蓋一個方法,則不能聲明與覆蓋方法不同的異常。聲明的任何異常必須是被覆蓋方法所聲明異常的同類或子類。

二、使用throw拋出異常

      throw總是出現在方法體中,用來拋出一個Throwable類型的異常。程序會在throw語句后立即終止,它后面的語句執行不到,然后在包含它的所有try塊中(可能在上層調用函數中)從里向外尋找含有與其匹配的catch子句的try塊。

      我們知道,異常是異常類的實例對象,我們可以創建異常類的實例對象通過throw語句拋出。該語句的語法格式為:

throw new exceptionname;

      例如拋出一個IOException類的異常對象:

throw new IOException;

       要注意的是,throw 拋出的只能夠是可拋出類Throwable 或者其子類的實例對象。下面的操作是錯誤的,因為String 不是Throwable 類的子類。

throw new String("exception");

      如果拋出了可查異常,則還應該在方法頭部聲明方法可能拋出的異常類型。該方法的調用者也必須檢查處理拋出的異常。

      如果所有方法都層層上拋獲取的異常,最終JVM會進行處理,處理也很簡單,就是打印異常消息和堆棧信息。如果拋出的是Error或RuntimeException,則該方法的調用者可選擇處理該異常。

throw的示例:

public class TestException {  
    public static void main(String[] args) {  
        int a = 6;  
        int b = 0;  
        
        try { 
            if (b == 0) {
    throw new ArithmeticException(); 
    //"除數為0"等ArithmeticException,是RuntimException的子類。而運行時異常將由運行時系統自動拋出,不需要使用throw語句,這里把throw new ArithmeticException()去掉也是不影響運行結果的。
   }
            System.out.println("a/b的值是:" + a / b);  
        } catch (ArithmeticException e) {
            System.out.println("程序出現異常,變量b不能為0。");  
        }  
        
        System.out.println("程序正常結束。");  
    }  
}

輸出結果為:

程序出現異常,變量b不能為0。
程序正常結束。

三、比較

3.1 在聲明方法時候拋出異常 

為什么要在聲明方法拋出異常?
答:方法是否拋出異常與方法返回值的類型一樣重要。假設方法拋出異常卻沒有聲明該方法將拋出異常,那么客戶程序員可以調用這個方法而且不用編寫處理異常的代碼。那么,一旦出現異常,那么這個異常就沒有合適的異常控制器來解決。

為什么拋出的異常一定是可檢查異常(除了Exception中的RuntimeException及其子類以外,其他的Exception類及其子類)?
答:RuntimeException與Error可以在任何代碼中產生,它們不需要由程序員顯示的拋出,一旦出現錯誤,那么相應的異常會被自動拋出。遇到Error,程序員一般是無能為力的;遇到RuntimeException,那么一定是程序存在邏輯錯誤,要對程序進行修改;只有可檢查異常才是程序員所關心的,程序應該且僅應該拋出或處理可檢查異常。而可檢查異常是由程序員拋出的,這分為兩種情況:客戶程序員調用會拋出異常的庫函數;客戶程序員自己使用throw語句拋出異常。

注意: 覆蓋父類某方法的子類方法不能拋出比父類方法更多的異常,所以,有時設計父類的方法時會聲明拋出異常,但實際的實現方法的代碼卻并不拋出異常,這樣做的目的就是為了方便子類方法覆蓋父類方法時可以拋出異常。

3.2 在方法中拋出異常

拋出什么異常?
答:對于一個異常對象,真正有用的信息是異常的對象類型,而異常對象本身毫無意義。比如一個異常對象的類型是ClassCastException,那么這個類名就是唯一有用的信息。所以,在選擇拋出什么異常時,最關鍵的就是選擇異常的類名能夠明確說明異常情況的類。

異常對象通常有兩種構造函數:一種是無參數的構造函數;另一種是帶一個字符串的構造函數,這個字符串將作為這個異常對象除了類型名以外的額外說明。

使用finally塊釋放資源
finally關鍵字保證無論程序使用任何方式離開try塊,finally中的語句都會被執行。因此,當你需要一個地方來執行在任何情況下都必須執行的代碼時,就可以將這些代碼放入finally塊中。當你的程序中使用了外界資源,如數據庫連接,文件等,必須將釋放這些資源的代碼寫入finally塊中。

注意: 在finally塊中不能拋出異常。JAVA異常處理機制保證無論在任何情況下必須先執行finally塊然后再離開try塊,因此在try塊中發生異常的時候,JAVA虛擬機先轉到finally塊執行finally塊中的代碼,finally塊執行完畢后,再向外拋出異常。如果在finally塊中拋出異常,try塊捕捉的異常就不能拋出,外部捕捉到的異常就是finally塊中的異常信息,而try塊中發生的真正的異常堆棧信息則丟失了。

關于Java中使用throw-throws拋出異常如何解決就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

长葛市| 汝州市| 印江| 泗阳县| 双鸭山市| 台南市| 承德市| 正阳县| 通化县| 宜丰县| 白水县| 芜湖县| 江安县| 贡嘎县| 莱芜市| 西平县| 奉新县| 竹山县| 洪泽县| 余姚市| 方城县| 济宁市| 洪湖市| 松溪县| 黑山县| 且末县| 班玛县| 鹤庆县| 珲春市| 武强县| 英山县| 上犹县| 通江县| 吉林市| 巫溪县| 永和县| 仁化县| 宽甸| 含山县| 商水县| 息烽县|