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

Java中的異常Exception詳細解析

 更新時間:2024年01月12日 08:55:19   作者:咕咕貓_  
這篇文章主要介紹了Java中的異常Exception詳細解析,Java語言中,將程序執(zhí)行中發(fā)生的不正常情況稱為"異常",(開發(fā)過程中的語法錯誤和邏輯錯誤不是異常),異常分為兩大類,運行時異常和編譯時異常,需要的朋友可以參考下

一、基本介紹

基本概念

Java語言中,將程序執(zhí)行中發(fā)生的不正常情況稱為“ 異常 ”。(開發(fā)過程中的語法錯誤和邏輯錯誤不是異常)

執(zhí)行過程中所發(fā)生的異常事件可分為兩大類

1.Error(錯誤):Java虛擬機無法解決的嚴重問題。如:JVM系統(tǒng)內(nèi)部錯誤、資源耗盡等嚴重情況。比如:StackOverflowError[棧溢出]和OOM(out of memory),Error是嚴重錯誤,程序會崩潰

2.Exception:其它因編譯錯誤和偶然的外在因素導(dǎo)致的一般性問題,可以使用針對性的代碼進行處理。例如空指針訪問,試圖讀取不存在的文件,網(wǎng)絡(luò)連接中斷等等,Exception分為兩大類:運行時異常[程序運行時發(fā)生的異常]和編譯時異常[編程時編譯器檢查出的異常]

異常類層次結(jié)構(gòu)圖

異常體系圖小結(jié):

1.異常分為兩大類,運行時異常和編譯時異常

2.運行時異常,編譯器檢查不出來。一般是指編程時的邏輯錯誤,是程序員應(yīng)該避免其出現(xiàn)的異常。java.lang.RuntimeException類及它的子類都是運行時異常

3.對于運行時異??梢圆蛔鎏幚?,因為這類異常很普遍,若全處理可能會對程序的可讀性和運行效率產(chǎn)生影響

4.編譯時異常是編譯器要求必須處置的異常

常見的運行時異常

1. NullPointerException 空指針異常

當應(yīng)用程序試圖在需要對象的地方使用null時,會拋出此異常

2. ArithmeticException 數(shù)學(xué)運算異常

當出現(xiàn)異常的運算條件時,會拋出此異常

3. ArrayIndexOutOfBoundsException 數(shù)組下標越界異常

用非法索引訪問數(shù)組時拋出的異常。如果索引為負或大于等于數(shù)組大小,則該索引為非法索引

4. ClassCastException 類型轉(zhuǎn)換異常

當試圖將對象強制轉(zhuǎn)換為不是實例的子類時,會拋出此異常

5.NumberFormatException 數(shù)字格式不正確異常

當應(yīng)用程序試圖將字符串轉(zhuǎn)換成一種數(shù)值類型,但該字符串不能轉(zhuǎn)換為適當格式,會拋出此異常—>使用異常我們可以確保輸入是滿足條件數(shù)字

二、異常處理

基本介紹

異常處理就是當異常發(fā)生時,對異常處理的方式

異常處理的方式

1. try—catch—finally :程序員在代碼中捕獲發(fā)生的異常,自行處理

2. throws :將發(fā)生的異常拋出,交給調(diào)用者(方法)來處理,最頂級的處理者就是JVM

三、try-catch異常處理

1.Java提供try和catch塊來處理異常。try塊用于包含可能出錯的代碼。catch塊用于處理try塊中發(fā)生的異常??梢愿鶕?jù)需要在程序中有多個try...catch塊

2.基本語法

try{
    //可疑代碼
    //將異常生成對應(yīng)的異常對象,傳遞給catch塊
}catch{
    //對異常的處理
}
//如果沒有finally,語法也可以通過

3. try-catch方式處理異常注意事項

①如果異常發(fā)生了,則異常發(fā)生后面的代碼不會執(zhí)行,直接進入到catch塊

②如果異常沒有發(fā)生,則順序執(zhí)行try的代碼塊,不會進入到catch

③如果希望不管是否發(fā)生異常,都執(zhí)行某段代碼(比如關(guān)閉連接,釋放資源等)則使用代碼 -finally{ }

try{
    //可疑代碼
}catch(異常){
    //....
}finally{
    //釋放資源等..
}

4.可以有多個catch語句捕獲不同的異常(進行不同的業(yè)務(wù)處理),要求子類異常寫在前面,父類異常寫在后面,比如(NullPointerException在前,Exception在后),如果發(fā)生異常,只會匹配一個catch

5.可以進行try-finally配合使用,這種用法相當于沒有捕獲異常,依次程序會直接崩掉/退出。應(yīng)用場景就是執(zhí)行一段代碼,不管是否發(fā)生異常,都必須執(zhí)行某個業(yè)務(wù)邏輯

try-catch-finally執(zhí)行順序小結(jié)

1.如果沒有出現(xiàn)異常,則執(zhí)行try塊中所有語句,不執(zhí)行catch塊中語句,如果有finally,最后還需要執(zhí)行finally里面的語句

2.如果出現(xiàn)異常,則try塊中異常發(fā)生后,try塊剩下的語句不會再執(zhí)行。將執(zhí)行catch塊中的語句,如果有finally,最后還需要執(zhí)行finally里的語句

public class TryCatchDetail {
    public static void main(String[] args) {
        //快捷鍵ctrl + alt + t
        //解讀
        //1.如果發(fā)生異常,則異常后面的代碼塊不會執(zhí)行,直接進入到catch塊
        //2.如果異常沒有發(fā)生,則順序執(zhí)行try的代碼塊,不會進入到catch
        //3.如果希望不管是否發(fā)生異常,都執(zhí)行某段代碼塊(比如關(guān)閉連接,釋放資源等)則使用代碼— finally
        try {
            String str = "123";
            int a = Integer.parseInt(str);
            System.out.println("數(shù)字:" + a);
        } catch (NumberFormatException e) {
            System.out.println("異常信息=" + e.getMessage());
        }finally{
            System.out.println("finally代碼塊被執(zhí)行...");
        }
        System.out.println("程序繼續(xù)執(zhí)行...");
    }
}
public class TryCatchDetail02 {
    public static void main(String[] args) {
        //解讀
        //1.如果try代碼塊可能有多個異常
        //2.可以使用多個catch分別捕獲不同的異常,相應(yīng)處理
        //3.要求子類異常寫在前面,父類異常寫在后面
        try {
            Person person = new Person();
            person = null;
            System.out.println(person.getName());//NullPointerException
            int n1 = 10;
            int n2 = 0;
            int res = n1 / n2;//ArithmeticException
        }catch (NullPointerException e) {
            System.out.println("空指針異常=" + e.getMessage());
        }catch(ArithmeticException e) {
            System.out.println("算數(shù)異常=" + e.getMessage());
        }catch (Exception e) {
            System.out.println("異常信息=" + e.getMessage());
        }finally {
        }
    }
}
class Person {
    private String name;
    public String getName() {
        return name;
    }
}
public class TryCatchDetail03 {
    public static void main(String[] args) {
        /*
        可以進行try-finally配合使用,這種用法相當于沒有捕獲異常,因此程序會直接崩掉/退出。
        應(yīng)用場景就是執(zhí)行一段代碼,不管是否發(fā)生異常,都必須執(zhí)行某個業(yè)務(wù)邏輯
         */
        try{
            int n1 = 10;
            int n2 = 0;
            System.out.println(n1 / n2);
        }finally {
            System.out.println("執(zhí)行了finally...");
        }
        System.out.println("程序繼續(xù)執(zhí)行...");
    }
}

四、thorws異常處理

基本介紹

1.如果一個方法中的語句執(zhí)行時可能生成某種異常,但是并不能確定如何處理這種異常,則此方法應(yīng)顯示地聲明拋出異常,表明該方法將不對這些異常進行處理,而由該方法的調(diào)用者負責處理

2.在方法生命中用throws語句可以聲明拋出異常的列表,thros后面的異常類型可以是方法中產(chǎn)生的異常類型,也可以是它的父類

注意事項和使用細節(jié)

1.對于編譯異常,程序中必須處理,比如try-catch或者throws

2.對于運行時異常,程序中如果沒有處理,默認就是throws的方式處理

3.子類重寫父類的方法時,對拋出異常的規(guī)定:子類重寫的方法,所拋出的異常類型要么和父類拋出的異常一致,要么為父類拋出的異常的子類型

4.在throws過程中,如果有方法try-catch,就相當于處理異常,就可以不必throws

五、自定義異常

基本概念

當程序中出現(xiàn)了某些“錯誤”,但該錯誤信息并沒有在Throwable子類中描述處理,這個時候可以自己設(shè)計異常類,用于描述該錯誤信息

自定義異常的步驟

1.定義類:自定義異常類名繼承Exception或RuntimeException

2.如果繼承Exception,屬于編譯異常

3.如果繼承RuntimeException,屬于運行異常(一般來說,繼承RuntimeException)

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

意義位置后面跟的東西
throws異常處理的一種方式方法聲明處異常類型
throw手動生成異常對象的關(guān)鍵字方法體中異常對象

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

相關(guān)文章

  • 深入解讀Java三大集合之map list set的用法

    深入解讀Java三大集合之map list set的用法

    集合彌補了數(shù)組的缺陷,它比數(shù)組更靈活更實用,可大大提高軟件的開發(fā)效率,而且不同的集合適用于不同的場合,這篇文章帶你了解Java的三大集合map、list、set用法
    2021-11-11
  • Java8使用Function讀取文件

    Java8使用Function讀取文件

    這篇文章主要為大家詳細介紹了Java8如何使用Function讀取文件,文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以參考一下
    2024-12-12
  • Java實現(xiàn)猜數(shù)程序

    Java實現(xiàn)猜數(shù)程序

    這篇文章主要為大家詳細介紹了Java實現(xiàn)猜數(shù)程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • 若依前后端打成一個JAR包部署的完整步驟

    若依前后端打成一個JAR包部署的完整步驟

    這篇文章主要介紹了如何將若依前后端分離項目打包成jar,不使用nginx轉(zhuǎn)發(fā),前端修改了路由模式和環(huán)境變量配置,后端增加了依賴、配置了Thymeleaf和訪問路徑,需要的朋友可以參考下
    2025-01-01
  • 關(guān)于分布式鎖(Redisson)的原理分析

    關(guān)于分布式鎖(Redisson)的原理分析

    這篇文章主要介紹了關(guān)于分布式鎖(Redisson)的原理,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • java并發(fā)請求下數(shù)據(jù)插入重復(fù)問題的解決方法

    java并發(fā)請求下數(shù)據(jù)插入重復(fù)問題的解決方法

    現(xiàn)在遇到一個項目,移動設(shè)備存儲數(shù)據(jù),然后一起上傳,那就出現(xiàn)了許多重復(fù)數(shù)據(jù),這篇文章主要給大家介紹了關(guān)于java并發(fā)請求下數(shù)據(jù)插入重復(fù)問題的解決方法,需要的朋友可以參考下
    2021-11-11
  • PageHelper在springboot中的使用方式

    PageHelper在springboot中的使用方式

    這篇文章主要介紹了PageHelper在springboot中的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Nacos集群搭建過程詳解

    Nacos集群搭建過程詳解

    這篇文章主要為大家介紹了Nacos集群搭建過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • Java中使用Lambda表達式和函數(shù)編程示例

    Java中使用Lambda表達式和函數(shù)編程示例

    這篇文章介紹了Java中使用Lambda表達式和函數(shù)編程示例,該文章會演示多個示列,分別是變量聲明上下文中的lambda、return語句上下文中的lambda、賦值上下文中的lambda、lambda在數(shù)組初始值設(shè)定項上下文中的用法等等,需要的朋友可以參考一下
    2021-10-10
  • Spring boot 打jar包分離lib的正確配置方式

    Spring boot 打jar包分離lib的正確配置方式

    spring boot打jar包分離lib后,配置文件的方式,在網(wǎng)上可以搜到很多答案,但是都不夠完善,今天小編給大家?guī)砹薙pring boot 打jar包分離lib的正確配置方式,感興趣的朋友一起看看吧
    2018-02-02

最新評論