欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中throw和throws異常處理完整例子說(shuō)明

 更新時(shí)間:2024年06月07日 09:20:33   作者:懶魚(yú)七憶  
這篇文章主要給大家介紹了關(guān)于Java中throw和throws異常處理的相關(guān)資料, throw關(guān)鍵字是用于在方法內(nèi)拋出異常,而throws關(guān)鍵字是在方法聲明中指定可能拋出的異常,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

簡(jiǎn)單來(lái)說(shuō)就是:你用throws不一定會(huì)拋出異常,它只是代表這個(gè)方法可能拋出這個(gè)異常,像打個(gè)預(yù)防針一樣;

你要用throw那一定會(huì)拋出異常,因?yàn)閠hrow是一個(gè)行為,代表拋出異常的動(dòng)作。  

一. throw關(guān)鍵字:

1.作用:

throw關(guān)鍵字用于在程序中手動(dòng)拋出一個(gè)異常。當(dāng)異常發(fā)生時(shí),程序會(huì)中斷當(dāng)前的執(zhí)行流程,并將異常信息傳遞給上層的異常處理機(jī)制。

2.使用場(chǎng)景:

(a)當(dāng)我們發(fā)現(xiàn)某些條件不符合業(yè)務(wù)邏輯要求時(shí),我們可以使用throw關(guān)鍵字拋出一個(gè)異常。

(b)當(dāng)我們?cè)诙x自己的異常類(lèi)時(shí),可以通過(guò)throw關(guān)鍵字主動(dòng)拋出這個(gè)自定義的異常對(duì)象。

3.代碼示例:

public void checkAge(int age) {
   if (age < 0) {
     throw new IllegalArgumentException("年齡不能為負(fù)數(shù)");
   }
}

二. throws關(guān)鍵字:

1.作用:

  throws關(guān)鍵字用于指定方法可能拋出的異常。它標(biāo)識(shí)了哪些異??梢詡鬟f到方法的調(diào)用者,需要調(diào)用者進(jìn)行相應(yīng)的處理。

2.使用場(chǎng)景:

  (a)當(dāng)方法內(nèi)部的代碼可能會(huì)引發(fā)異常時(shí),可以使用throws關(guān)鍵字聲明這些異常。
  (b)當(dāng)我們不希望在當(dāng)前方法中捕獲異常,并且希望將異常傳遞給上層調(diào)用者來(lái)處理時(shí),可以使用throws關(guān)鍵字。

3.代碼示例:

public void readFile() throws IOException {
   // 異常處理邏輯
}

三. 區(qū)別與聯(lián)系:

throw關(guān)鍵字是用于在方法內(nèi)拋出異常,而throws關(guān)鍵字是在方法聲明中指定可能拋出的異常。

  • throw關(guān)鍵字通常用于手動(dòng)拋出異常,而throws關(guān)鍵字通常用于聲明方法可能拋出的異常。
  • throw關(guān)鍵字只能拋出一個(gè)異常對(duì)象,而throws關(guān)鍵字可以同時(shí)指定多個(gè)異常。
  • throw關(guān)鍵字會(huì)中斷當(dāng)前的執(zhí)行流程,尋找合適的異常處理機(jī)制,而throws關(guān)鍵字將異常傳遞給調(diào)用者來(lái)處理。

四. 完整的例子說(shuō)明(1):

下面我們通過(guò)一個(gè)完整的例子來(lái)說(shuō)明throw和throws的使用:

public class Example {
    public void divide(int a, int b){
        if (b == 0) {
            throw new ArithmeticException("除數(shù)不能為0");
        }
        int result = a / b;
        System.out.println("結(jié)果為:" + result);
    }

    public static void main(String[] args) {
        Example example = new Example();
        String name = null;
        try {
            example.divide(10, 0);
            String a = "";
            System.out.println("name = "+name.length());
            //處理除數(shù)異常
        } catch (ArithmeticException e) {
            System.out.println("捕獲到異常:" + e.getMessage());
            example.divide(10, 2);
            //處理空指針異常
        } catch (NullPointerException e){
            System.out.println("捕獲到異常:" + e.getMessage());
        }
    }
}

在上面的例子中,我們定義了一個(gè)divide方法,用于計(jì)算兩個(gè)數(shù)相除的結(jié)果。如果除數(shù)為0,我們通過(guò)throw關(guān)鍵字手動(dòng)拋出一個(gè)ArithmeticException異常。在main方法中,我們通過(guò)try-catch塊捕獲并處理這個(gè)異常。這里通過(guò)throws關(guān)鍵字聲明了divide方法可能拋出的異常。在catch塊中,首先捕獲了ArithmeticException類(lèi)型的異常,并打印異常信息。

緊接著,我們調(diào)用了example的divide方法,傳入?yún)?shù)10和2,這是因?yàn)樵谏弦粋€(gè)異常處理后,我們想要繼續(xù)進(jìn)行除法運(yùn)算。最后,我們又捕獲了NullPointerException類(lèi)型的異常,并打印了異常信息。

這段代碼演示了異常的拋出和捕獲過(guò)程。當(dāng)divide方法中的除數(shù)為0時(shí),會(huì)拋出ArithmeticException異常,然后在main方法中通過(guò)try-catch塊捕獲并處理了這個(gè)異常。另外,在處理ArithmeticException異常后,又出現(xiàn)了一個(gè)空指針異常,同樣通過(guò)try-catch塊進(jìn)行了處理。這個(gè)例子展示了異常的傳播和多重異常處理的過(guò)程。

五. 完整的例子說(shuō)明(2):

上個(gè)例子沒(méi)看懂,沒(méi)關(guān)系,我用這個(gè)重新解釋一下。

package org.example;

/**
 * @author 懶魚(yú)
 * @date 2024/1/3 9:33
 */
public class Example {

    // 這個(gè)方法使用 throws 關(guān)鍵字聲明可能拋出的異常。這對(duì)于調(diào)用者是一個(gè)信號(hào),它們需要準(zhǔn)備好處理這些異常。
    public void divide(int a, int b) throws ArithmeticException, NullPointerException {
        int result = a / b;
        System.out.println("結(jié)果為:" + result);
    }

    // 模擬一個(gè)操作可能會(huì)引發(fā) NullPointerException 的情況
    public void process(String name){
        System.out.println("name = "+name);
       throw new NullPointerException("字符串不能為空");
    }

    public static void main(String[] args) {
        Example example = new Example();

        try {
            example.divide(10, 2);
        } catch (ArithmeticException e) {
            System.out.println("divide捕獲到除數(shù)異常:" + e.getMessage());
        } catch (NullPointerException e) {
            System.out.println("divide未執(zhí)行,但可能會(huì)拋出的異常類(lèi)型通過(guò) throws 聲明了");
        }

        // 移到另一個(gè) try-catch 塊,以突出顯示每個(gè)方法的異常處理
        try {
            example.process("張三");
        } catch (NullPointerException e) {
            System.out.println("process捕獲到空指針異常:" + e.getMessage());
        }
    }
}

打?。?/h3>

divide方法我用throws  聲明了ArithmeticException, NullPointerExceptio 兩個(gè)異常

因?yàn)闆](méi)有出現(xiàn)異常,所以沒(méi)有拋出異常,正常打印出。

而 process 雖然代碼沒(méi)問(wèn)題,但我直接用throw new NullPointerException("字符串不能為空");異常,所以try - cath 就直接捕獲。

所以,就像我一開(kāi)始說(shuō)的:你用throws不一定會(huì)拋出異常,它只是代表這個(gè)方法可能拋出這個(gè)異常,像打個(gè)預(yù)防針一樣;你要用throw那一定會(huì)拋出異常,因?yàn)閠hrow是一個(gè)行為,代表拋出異常的動(dòng)作。  

附:throw/throws面試題

一、throw 和 throws 關(guān)鍵字有什么區(qū)別?

  • throw 和 throws 關(guān)鍵字都與異常處理有關(guān),但用法和目的不同。
  • throw 關(guān)鍵字用于手動(dòng)拋出異常,通常用于在代碼中檢測(cè)到錯(cuò)誤或異常情況時(shí)中斷當(dāng)前代碼的執(zhí)行,并將異常對(duì)象拋出給調(diào)用者。
  • throws 關(guān)鍵字用于在方法聲明中聲明該方法可能拋出的異常,以便調(diào)用者知道需要對(duì)異常進(jìn)行處理。

二、throw 關(guān)鍵字在什么情況下使用?

  • throw 關(guān)鍵字用于在代碼中手動(dòng)拋出異常,通常在檢測(cè)到錯(cuò)誤或異常情況時(shí)使用。
  • 例如當(dāng)輸入?yún)?shù)非法、資源不可用、網(wǎng)絡(luò)連接斷開(kāi)等情況下,可以使用 throw 語(yǔ)句拋出相應(yīng)的異常。

三、throws 關(guān)鍵字的作用是什么?

  • throws 關(guān)鍵字用于在方法聲明中聲明該方法可能拋出的異常。
  • 它的作用是告訴調(diào)用者需要對(duì)可能的異常情況進(jìn)行處理,要么使用 try-catch 語(yǔ)句塊捕獲并處理異常,要么繼續(xù)將異常向上一級(jí)調(diào)用棧傳遞。

四、throw 和 throws 關(guān)鍵字的異常處理方式有什么不同?

  • throw 關(guān)鍵字用于手動(dòng)拋出異常,通常在當(dāng)前代碼中直接處理異常情況。
  • throws 關(guān)鍵字用于聲明方法可能拋出的異常,將異常處理責(zé)任交給方法的調(diào)用者。

五、throws 關(guān)鍵字是否要求在方法中實(shí)際拋出異常?

  • 不一定。throws 關(guān)鍵字只是在方法聲明中聲明方法可能拋出的異常,但方法內(nèi)部是否實(shí)際拋出異常不是強(qiáng)制的。

六、如果一個(gè)方法聲明了 throws 異常,那么調(diào)用該方法時(shí)怎么處理異常?

  • 調(diào)用該方法時(shí),必須對(duì)拋出的異常進(jìn)行處理,要么使用 try-catch 語(yǔ)句塊捕獲并處理異常,要么在方法調(diào)用處的上層調(diào)用棧中繼續(xù)使用 throws 關(guān)鍵字聲明可能的異常。

總結(jié):

本篇博客詳細(xì)講解了throw和throws這兩個(gè)關(guān)鍵字的使用,以及它們之間的區(qū)別。throw關(guān)鍵字用于手動(dòng)拋出異常,而throws關(guān)鍵字用于聲明方法可能拋出的異常。它們都有助于編寫(xiě)更加健壯的異常處理代碼。希望通過(guò)這篇博客,讀者能更好地掌握這兩個(gè)關(guān)鍵字的用法,并在實(shí)際編程中靈活運(yùn)用。

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

相關(guān)文章

  • 解決springMVC 跳轉(zhuǎn)js css圖片等靜態(tài)資源無(wú)法加載的問(wèn)題

    解決springMVC 跳轉(zhuǎn)js css圖片等靜態(tài)資源無(wú)法加載的問(wèn)題

    下面小編就為大家?guī)?lái)一篇解決springMVC 跳轉(zhuǎn)js css圖片等靜態(tài)資源無(wú)法加載的問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10
  • Spring事物的傳播特性詳解

    Spring事物的傳播特性詳解

    這篇文章主要介紹了Spring事物的傳播性詳解,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-05-05
  • 解決mybatis-plus-boot-starter與mybatis-spring-boot-starter的錯(cuò)誤問(wèn)題

    解決mybatis-plus-boot-starter與mybatis-spring-boot-starter的錯(cuò)誤問(wèn)題

    本文主要講述了在使用MyBatis和MyBatis-Plus時(shí)遇到的綁定異常問(wèn)題,通過(guò)排查和總結(jié),作者發(fā)現(xiàn)使用MyBatis-Plus?Boot?Starter可以解決這個(gè)問(wèn)題,文章詳細(xì)對(duì)比了MyBatis-Plus?Boot?Starter和MyBatis?Spring?Boot?Starter的功能和使用場(chǎng)景
    2025-01-01
  • java中break和continue區(qū)別及使用場(chǎng)合分析

    java中break和continue區(qū)別及使用場(chǎng)合分析

    本文力圖通過(guò)實(shí)例加使用場(chǎng)合詳解來(lái)引導(dǎo)菜鳥(niǎo)重新認(rèn)識(shí)break和continue語(yǔ)句,需要的朋友可以參考下
    2014-01-01
  • Java畢業(yè)設(shè)計(jì)實(shí)戰(zhàn)之校園一卡通系統(tǒng)的實(shí)現(xiàn)

    Java畢業(yè)設(shè)計(jì)實(shí)戰(zhàn)之校園一卡通系統(tǒng)的實(shí)現(xiàn)

    這是一個(gè)使用了java+Springboot+Maven+mybatis+Vue+mysql+wd開(kāi)發(fā)的校園一卡通系統(tǒng),是一個(gè)畢業(yè)設(shè)計(jì)的實(shí)戰(zhàn)練習(xí),具有校園一卡通系統(tǒng)該有的所有功能,感興趣的朋友快來(lái)看看吧
    2022-01-01
  • 修改idea的這些啟動(dòng)參數(shù),令你的idea健步如飛

    修改idea的這些啟動(dòng)參數(shù),令你的idea健步如飛

    這篇文章主要介紹了修改idea的這些啟動(dòng)參數(shù),令你的idea健步如飛~具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • java程序中protobuf的基本用法示例

    java程序中protobuf的基本用法示例

    這篇文章主要給大家介紹了關(guān)于java程序中protobuf的基本用法,protobuf 與json相比具有 壓縮比高 、解壓縮速度更快的優(yōu)點(diǎn),本文通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-08-08
  • 在CentOS系統(tǒng)上安裝Java?JDK?8簡(jiǎn)單步驟

    在CentOS系統(tǒng)上安裝Java?JDK?8簡(jiǎn)單步驟

    最近購(gòu)買(mǎi)一臺(tái)新的云服務(wù)器,用于開(kāi)發(fā)學(xué)習(xí)使用,因此需要安裝很多的組件,下面這篇文章主要給大家介紹了關(guān)于在CentOS系統(tǒng)上安裝Java?JDK8的簡(jiǎn)單步驟,需要的朋友可以參考下
    2023-12-12
  • SpringBoot如何讀取resources目錄下的文件

    SpringBoot如何讀取resources目錄下的文件

    這篇文章主要介紹了SpringBoot如何讀取resources目錄下的文件問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 關(guān)于Java的Condition接口最佳理解方式

    關(guān)于Java的Condition接口最佳理解方式

    這篇文章主要介紹了關(guān)于Java的Condition接口最佳理解方式,Condition就是實(shí)現(xiàn)了管程里面的條件變量,Java?語(yǔ)言?xún)?nèi)置的管程里只有一個(gè)條件變量,而Lock&Condition實(shí)現(xiàn)的管程支持多個(gè)條件變量,需要的朋友可以參考下
    2023-05-05

最新評(píng)論