最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

簡(jiǎn)述Java中throw-throws異常拋出

 更新時(shí)間:2021年08月06日 15:56:06   作者:王小二(海闊天空)  
任何Java代碼都可以拋出異常,本文主要介紹了Java中throw-throws異常拋出,具有一定的參考價(jià)值,感興趣的可以了解一下

      任何Java代碼都可以拋出異常,如:自己編寫的代碼、來自Java開發(fā)環(huán)境包中代碼,或者Java運(yùn)行時(shí)系統(tǒng)。無論是誰(shuí),都可以通過Java的throw語(yǔ)句拋出異常。從方法中拋出的任何異常都必須使用throws子句。

一、throws拋出異常

      如果一個(gè)方法可能會(huì)出現(xiàn)異常,但沒有能力處理這種異常,可以在方法聲明處用throws子句來聲明拋出異常。例如汽車在運(yùn)行時(shí)可能會(huì)出現(xiàn)故障,汽車本身沒辦法處理這個(gè)故障,那就讓開車的人來處理。

      throws語(yǔ)句用在方法定義時(shí)聲明該方法要拋出的異常類型,如果拋出的是Exception異常類型,則該方法被聲明為拋出所有的異常。多個(gè)異??墒褂枚禾?hào)分割。throws語(yǔ)句的語(yǔ)法格式為:

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

      方法名后的throws Exception1,Exception2,…,ExceptionN 為聲明要拋出的異常列表。當(dāng)方法拋出異常列表的異常時(shí),方法將不對(duì)這些類型及其子類類型的異常作處理,而拋向調(diào)用該方法的方法,由他去處理。

      使用throws關(guān)鍵字將異常拋給調(diào)用者后,如果調(diào)用者不想處理該異常,可以繼續(xù)向上拋出,但最終要有能夠處理該異常的調(diào)用者。

Throws拋出異常的規(guī)則:

  1. 如果是不可查異常(unchecked exception),即Error、RuntimeException或它們的子類,那么可以不使用throws關(guān)鍵字來聲明要拋出的異常,編譯仍能順利通過,但在運(yùn)行時(shí)會(huì)被系統(tǒng)拋出。
  2. 如果一個(gè)方法可能出現(xiàn)可查異常(checked exception),要么用try-catch語(yǔ)句捕獲,要么用throws子句聲明將它拋出,否則會(huì)導(dǎo)致編譯錯(cuò)誤。
  3. 只有當(dāng)拋出了異常時(shí),該方法的調(diào)用者才必須處理或者重新拋出該異常。當(dāng)方法的調(diào)用者無力處理該異常的時(shí)候,應(yīng)該繼續(xù)拋出。
  4. 調(diào)用方法必須遵循任何可查異常的處理和聲明規(guī)則。若覆蓋一個(gè)方法,則不能聲明與覆蓋方法不同的異常。聲明的任何異常必須是被覆蓋方法所聲明異常的同類或子類。

二、使用throw拋出異常

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

      我們知道,異常是異常類的實(shí)例對(duì)象,我們可以創(chuàng)建異常類的實(shí)例對(duì)象通過throw語(yǔ)句拋出。該語(yǔ)句的語(yǔ)法格式為:

throw new exceptionname;

      例如拋出一個(gè)IOException類的異常對(duì)象:

throw new IOException;

       要注意的是,throw 拋出的只能夠是可拋出類Throwable 或者其子類的實(shí)例對(duì)象。下面的操作是錯(cuò)誤的,因?yàn)镾tring 不是Throwable 類的子類。

throw new String("exception");

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

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

throw的示例:

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

輸出結(jié)果為:

程序出現(xiàn)異常,變量b不能為0。
程序正常結(jié)束。

三、比較

3.1 在聲明方法時(shí)候拋出異常 

為什么要在聲明方法拋出異常?
答:方法是否拋出異常與方法返回值的類型一樣重要。假設(shè)方法拋出異常卻沒有聲明該方法將拋出異常,那么客戶程序員可以調(diào)用這個(gè)方法而且不用編寫處理異常的代碼。那么,一旦出現(xiàn)異常,那么這個(gè)異常就沒有合適的異??刂破鱽斫鉀Q。

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

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

3.2 在方法中拋出異常

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

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

使用finally塊釋放資源
finally關(guān)鍵字保證無論程序使用任何方式離開try塊,finally中的語(yǔ)句都會(huì)被執(zhí)行。因此,當(dāng)你需要一個(gè)地方來執(zhí)行在任何情況下都必須執(zhí)行的代碼時(shí),就可以將這些代碼放入finally塊中。當(dāng)你的程序中使用了外界資源,如數(shù)據(jù)庫(kù)連接,文件等,必須將釋放這些資源的代碼寫入finally塊中。

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

到此這篇關(guān)于簡(jiǎn)述Java中throw-throws異常拋出的文章就介紹到這了,更多相關(guān)Java throw-throws異常拋出內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java?MyBatis傳出參數(shù)resultType和resultMap解讀

    Java?MyBatis傳出參數(shù)resultType和resultMap解讀

    這篇文章主要介紹了Java?MyBatis傳出參數(shù)resultType和resultMap解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Java中hutool?List集合對(duì)象拷貝案例代碼

    Java中hutool?List集合對(duì)象拷貝案例代碼

    這篇文章主要給大家介紹了關(guān)于Java中hutool?List集合對(duì)象拷貝的相關(guān)資料,介紹了如何將兩個(gè)不同對(duì)象(Point和CustomData)的特定字段拷貝到一個(gè)中間對(duì)象(IotDataCache)中,并討論了一些在實(shí)現(xiàn)過程中遇到的問題和解決方法,需要的朋友可以參考下
    2024-11-11
  • java大話之創(chuàng)建型設(shè)計(jì)模式教程示例

    java大話之創(chuàng)建型設(shè)計(jì)模式教程示例

    這篇文章主要為大家介紹了java大話之創(chuàng)建型設(shè)計(jì)模式教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • Java將網(wǎng)絡(luò)圖片轉(zhuǎn)成輸入流以及將url轉(zhuǎn)成InputStream問題

    Java將網(wǎng)絡(luò)圖片轉(zhuǎn)成輸入流以及將url轉(zhuǎn)成InputStream問題

    這篇文章主要介紹了Java將網(wǎng)絡(luò)圖片轉(zhuǎn)成輸入流以及將url轉(zhuǎn)成InputStream問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • idea如何查看安裝插件的位置

    idea如何查看安裝插件的位置

    這篇文章主要介紹了idea如何查看安裝插件的位置問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • SpringBoot項(xiàng)目中日志管理與調(diào)優(yōu)指南

    SpringBoot項(xiàng)目中日志管理與調(diào)優(yōu)指南

    在 Spring Boot 開發(fā)過程中,日志管理是開發(fā)者必須掌握的重要技能之一,合理的日志配置不僅能幫助開發(fā)者追蹤應(yīng)用程序的執(zhí)行流程、定位問題,還能提升應(yīng)用程序的可維護(hù)性,本文將詳細(xì)探討 Spring Boot 項(xiàng)目中日志管理的常見問題、解決方案以及最佳實(shí)踐
    2024-10-10
  • Spark SerializedLambda錯(cuò)誤的兩種解決方案

    Spark SerializedLambda錯(cuò)誤的兩種解決方案

    這篇文章主要介紹了Spark SerializedLambda錯(cuò)誤的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • SpringBoot 錯(cuò)誤處理機(jī)制與自定義錯(cuò)誤處理實(shí)現(xiàn)詳解

    SpringBoot 錯(cuò)誤處理機(jī)制與自定義錯(cuò)誤處理實(shí)現(xiàn)詳解

    這篇文章主要介紹了SpringBoot 錯(cuò)誤處理機(jī)制與自定義錯(cuò)誤處理實(shí)現(xiàn)詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-11-11
  • Java實(shí)現(xiàn)企業(yè)微信消息推送功能的詳細(xì)步驟

    Java實(shí)現(xiàn)企業(yè)微信消息推送功能的詳細(xì)步驟

    這篇文章主要介紹了Java實(shí)現(xiàn)企業(yè)微信消息推送功能,本文圖文實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • Ribbon負(fù)載均衡服務(wù)調(diào)用的示例詳解

    Ribbon負(fù)載均衡服務(wù)調(diào)用的示例詳解

    Rbbo其實(shí)就是一個(gè)軟負(fù)載均衡的客戶端組件,他可以和其他所需請(qǐng)求的客戶端結(jié)合使用,這篇文章主要介紹了Ribbon負(fù)載均衡服務(wù)調(diào)用案例代碼,需要的朋友可以參考下
    2023-01-01

最新評(píng)論

容城县| 盱眙县| 阿拉善右旗| 陈巴尔虎旗| 长汀县| 江源县| 扶沟县| 云林县| 甘德县| 凤城市| 巩义市| 阳曲县| 江西省| 醴陵市| 迭部县| 湘阴县| 孝感市| 衡山县| 兴仁县| 张家界市| 东丽区| 同江市| 青田县| 肥西县| 嫩江县| 平泉县| 龙胜| 金塔县| 邮箱| 油尖旺区| 澜沧| 深水埗区| 都兰县| 乐业县| 曲松县| 海林市| 滨州市| 临沂市| 梅河口市| 偏关县| 曲水县|