溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java異常Exception實(shí)例分析

發(fā)布時(shí)間:2022-07-30 15:22:58 來源:億速云 閱讀:130 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要講解了“Java異常Exception實(shí)例分析”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Java異常Exception實(shí)例分析”吧!

1、異常中最大的父類Throwable

Java異常Exception實(shí)例分析

Throwable可以分為兩種:

Error

Exception: 

  • 運(yùn)行時(shí)異常(非受檢異常)

  • 非運(yùn)行時(shí)異常(受檢異常)

Error錯(cuò)誤:Error是程序無法處理的錯(cuò)誤,它是由jvm產(chǎn)生拋出的,比如OutOfMemoryError,ThreadDeath等,這些異常發(fā)生時(shí),jvm會(huì)選擇終止程序執(zhí)行

Exception:是程序本身可以處理的異常

  • 運(yùn)行時(shí)異常:都是RuntimeException類及子類,如NullPointerException(空指針),IndexOutOfBoundException(數(shù)組越界)等,這些異??梢赃x擇捕獲處理,或者可以不處理

  • 非運(yùn)行時(shí)異常:(受檢異常)時(shí)除了RuntimeException以外的異常,類型上屬于Exception類,從程序語(yǔ)法角度這些異常必須要進(jìn)行處理,如果不處理,程序不餓能通過編譯,如IOException,SQIException

2、try-catch-finally三條語(yǔ)句注意的問題

  • try,catch,finally均不能單獨(dú)使用,三者可以組合使用,組合方式:try…catch, try…catch…finally, try…finally ,其中catch可以有一個(gè)或者多個(gè),finally語(yǔ)句最多只能有一個(gè)

  • 三個(gè)語(yǔ)句塊中變量的作用域?yàn)榇a塊,分別獨(dú)立的不能互相訪問,如果要在三塊中都可以訪問,就把變量定義到這些塊外邊

  • 如果存在多個(gè)catch塊,最多只會(huì)匹配一個(gè)異常類且執(zhí)行該catch塊代碼,而不會(huì)在執(zhí)行其他catch塊,且匹配順序是從上到下,最多只會(huì)匹配一個(gè)異常類,也就是說也可以一個(gè)異常類都不執(zhí)行

  • catch捕獲的異常類不能重復(fù),且先捕獲子類異常再捕獲父類異常

  • 無論try中語(yǔ)句有沒有問題,finally中的語(yǔ)句一定執(zhí)行,finally為程序提供統(tǒng)一的出口,保證程序狀態(tài)的統(tǒng)一管理,通常情況下finally中進(jìn)行資源的關(guān)閉清除工作

package com.exception;
public class Test {
    public static void main(String[] args) {
        int[] a=new int[5];
        try {
            for (int i = 0; i <10 ; i++) {
                a[i]=i;
            }
            //空指針
        }catch (ArrayIndexOutOfBoundsException e){
            //彈出出錯(cuò)的地方
            System.out.println("1");
            e.printStackTrace();
            //訪問異常,數(shù)組越界
        }catch (NullPointerException e){
            System.out.println("2");
            e.printStackTrace();
            //無論有錯(cuò)與否,finally最終執(zhí)行
        } finally {
            System.out.println("都能執(zhí)行");
        }
        System.out.println("---------------");
    }
}

3、final-finally-finalize的各作用

  • final:用于定義常量的關(guān)鍵字

  • finally:異常中總能執(zhí)行的代碼塊

  • finalize() :垃圾回收,該方法是系統(tǒng)調(diào)用,不用程序員手動(dòng)調(diào)用

4、throws關(guān)鍵字

  • 定義一個(gè)方法的時(shí)候可以使用throws關(guān)鍵字聲明,表示該方法時(shí)不處理該異常,而是交給方法調(diào)用者處理該異常

  • 在定義方法時(shí),throws關(guān)鍵字可以程序員自主選擇使用,如果使用了,那么說明該方法時(shí)不處理該異常的

  • 如果主方(main)也使用throws關(guān)鍵字,那么就意味著主方法也不處理異常,最后留給jvm處理,jvm處理異常就是終止程序

  • throws拋出一個(gè)子類異常,調(diào)用該方法的調(diào)用者可以不必須處理該異常

注意:

throw關(guān)鍵字:是可以自定義異常,也就是拋異常,拋出的時(shí)候是一個(gè)異常類的對(duì)象

5、throws和throw的區(qū)別

throws:

  • 用在方法聲明之后,跟著的是異常類名

  • 可以跟多個(gè)異常類,用逗號(hào)隔開

  • 表示拋出異常,有該方法的調(diào)用者處理

  • throws表示出現(xiàn)異常的一種可能性,并不一定會(huì)發(fā)生異常

throw:

  • 用在方法體內(nèi),跟著的是異常對(duì)象

  • 只能拋出一個(gè)異常對(duì)象

  • 表示拋出異常,有方法體內(nèi)語(yǔ)句處理

  • throw拋異常是一定會(huì)發(fā)生,并不是一種可能

代碼表示:

package com.test;
public class Throw {
    //throws Exception 代表該方法出現(xiàn)異常時(shí)不做處理
    public void deposit(int num1,int num2) throws Exception
    {
        // RuntimeException()是運(yùn)行時(shí)異常最大的父類
        int sum;
        if(num2==0){
            throw new RuntimeException("可以自定義一個(gè)異常拋出:除數(shù)不能為0");
        }else{
           sum=num1/num2;
        }
    }
}

感謝各位的閱讀,以上就是“Java異常Exception實(shí)例分析”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)Java異常Exception實(shí)例分析這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI