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

Java?異常機(jī)制Exception和自定義異常

 更新時間:2022年05月12日 10:41:36   作者:??lightning_sable????  
這篇文章主要介紹了Java?異常機(jī)制Exception+自定義異常,異常分三種檢查性異常、運(yùn)行時異常、錯誤ERROR,下文對其更多詳細(xì)介紹,需要的小伙伴可以參考一下

異常機(jī)制

異常:就是不符合實際需求,在實際中可能不存在也可能不滿足實際,所以出現(xiàn)的問題稱之為異常。

異常的三種類型:

  • 檢查性異常:用戶錯誤或問題引起的異常,是程序員無法預(yù)見的。例如打開一個不存在的文件,就會發(fā)生一個檢查性異常。
  • 運(yùn)行時異常:是可能被程序員避免的異常,與檢查性異常相反,運(yùn)行時異??梢栽诰幾g是被忽略。
  • 錯誤(ERROR):錯誤不是異常!錯誤是脫離了程序員的問題。一般不是程序員的問題。

異常體系結(jié)構(gòu)

Java當(dāng)中,萬物皆對象,Java將異常當(dāng)作對象來處理,定義了一個基類(父類),java.lang.Throwable作為異常的超類。 java中的異常分為兩大類:錯誤(Error)和異常(Exception)。 錯誤: Error是由Java虛擬機(jī)產(chǎn)生并拋出的,大多數(shù)的錯誤與程序員是沒有關(guān)系的。 多數(shù)情況是Java虛擬機(jī)運(yùn)行錯誤(Virtual MachineError),Java虛擬機(jī)將會終止線程。 這些錯誤是不可查的,因為在程序的控制能力之外。 異常: 在異常(Exception)分支中有一個重要的子類RuntimeException(運(yùn)行時異常);

  • ArrayIndexOutofBoundsException(數(shù)組下標(biāo)越界異常)
  • ClassNotFoundException(找不到類異常)

等異常是不檢查異常,程序可以選擇捕獲處理,也可以不處理。 這些異常通常是因為程序邏輯錯誤引起的,程序應(yīng)該從邏輯角度盡可能的避免異常的發(fā)生。 錯誤(Error)與異常(Exception)的區(qū)別: Error通常是災(zāi)難性致命的錯誤,是程序無法控制和處理的,當(dāng)出現(xiàn)這些異常時,Java虛擬機(jī)(JVM)會選擇終止線程;Exception通常情況時可以被程序處理的,并且在程序中,盡可能的去處理和發(fā)現(xiàn)這些異常,這些異常通常是程序員的邏輯出現(xiàn)的問題。異常當(dāng)中,RuntimeException(運(yùn)行時異常),除此之外的異常統(tǒng)稱為非運(yùn)行時異常。注意的是錯誤就是錯誤,異常可以分為運(yùn)行時異常和非運(yùn)行時異常。

異常的捕獲與拋出

  • 拋出異常
  • 捕獲異常

異常處理的5個關(guān)鍵字:

  • try(嘗試著去處理,試一試的意思)、catch(捕獲)、finally(是否執(zhí)行都會走到這個語句當(dāng)中)、throw(拋出異常)、throws(拋出異常)。

捕獲并拋出異常: 舉例:數(shù)組下標(biāo)越界異常處理: 

 正如上圖所示,并別有輸出數(shù)組下標(biāo)的元素,因為元素本身就不存在,產(chǎn)生異常,所以將異常進(jìn)行捕獲并進(jìn)行了拋出。 值得注意的是在普通異常當(dāng)中,可以不使用finally,但是try與catch是必須要的,必不可少的,finally在IO流當(dāng)中可以明顯的發(fā)現(xiàn)它的作用。比如說在Scanner當(dāng)中,需要關(guān)閉用戶輸入(scanner.close()),那么finally就起到了很重要的作用。 值得注意的是異常的基類,Throwable是所有異常的父類,

如下圖所示: 

 catch (Error e)中,括號里面的Error為想要捕獲的異常類型,e為一個變量。 在Java當(dāng)中可以捕獲多個異常,Java中進(jìn)行了提供,如下圖所示(當(dāng)程序中可能出現(xiàn)多個異常時): 下圖中我們可以得到結(jié)果,該程序是一個異常,而不是一個錯誤! 

 下面的代碼就好像一個循環(huán),如果程序中可能將會出現(xiàn)多個異常,那么就可以在下面的語句中實現(xiàn),切記的是異?;惪梢苑旁谧詈?。

try{
}catch(){
	System.out.println();
	}catch(){
	System.out.println();
	}finally{
}

下圖中是捕獲多個異常,但是將異常的基類放在了第一個,導(dǎo)致程序報錯,所以后面的捕獲失去了意義導(dǎo)致報錯。所以異常的基類應(yīng)該放在最后! 

 注意:我們可以看到上圖中出現(xiàn)報錯,是因為異常的捕獲需要從小到大,但是第一個直接就放了一個最大的基類,所以出現(xiàn)報錯。如果說需要捕獲多個異常,那么需要從小到大類捕獲。 try-catch快捷鍵的使用:選中需要try的部分:ctrl+alt+T,

如下圖所示: 

 假如說程序出現(xiàn)異常,我們可以讓程序運(yùn)行結(jié)束或者說是退出: 

上面的括號中的數(shù)字,任意即可,表示程序異常時退出程序! 在異常當(dāng)中,我們可以主動的去判斷是否有異常,然后再進(jìn)行拋出異常。

如下圖(主動拋出異常): 

 異常的主動拋出一般在方法當(dāng)中使用!如下圖所示: 

如果我們知道會有異常,上面的方法又處理不掉異常,那么可以在方法上拋出異常。

如下圖所示: 注意:在方法中拋出異常使用throw,但是在方法上使用throws! 

 在方法體中沒有解決掉異常的拋出,在方法上拋出異常,拋出異常后如果不使用try-catch,那么程序就不會繼續(xù)執(zhí)行。使用try-catch后,程序仍然會繼續(xù)執(zhí)行。

使用try-catch時: 

 不使用try-catch時: 

自定義異常

使用Java內(nèi)置的異常類可以描述在編程時出現(xiàn)的大部分異常,但是,用戶還可以自定義異常。用戶自定義異常類,只需要繼承Exception。

自定義異常步驟如下:

  • 創(chuàng)建自定義的異常類;
  • 在方法當(dāng)中通過throw關(guān)鍵字拋出異常對象;
  • 如果在當(dāng)前拋出異常的方法當(dāng)中處理異常,可以使用try-catch語句捕獲并進(jìn)行處理;否則在方法的聲明語句當(dāng)中通過throws關(guān)鍵字指明拋出給方法調(diào)用者的異常,繼續(xù)執(zhí)行下一步操作;
  • 在出現(xiàn)異常方法的調(diào)用者中捕獲并處理異常。

自定義異常類的書寫,在書寫的過程當(dāng)中,或許我們只知道需要繼承Exception,但是當(dāng)繼承之后無法入手,我們可以通過看一下異常處理的一些方法,如下圖所示: 第一步: 

 第二步:傳入一個符合程序,不會拋出異常的值; 

 第三步:打印一個不符合程序設(shè)定的值,拋出異常; 

 總圖: 1.拋出異常的圖: 

 2.沒有拋出異常的圖: 

總結(jié):

  • 運(yùn)行時處理異常,采用邏輯合理規(guī)避,使用try-catch處理;
  • 盡可能的使用finally語句塊去釋放占用的資源;
  • 異常需要盡可能的去處理,不要簡單的打印輸出;
  • 對于潛在的異常,可以使用try-catch處理潛在的異常,還有不確定的代碼可以使用try-catch進(jìn)行規(guī)避;
  • 具體的如何去處理異常,根據(jù)不同的業(yè)務(wù)需求和異常情況去進(jìn)行合理的異常。

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

相關(guān)文章

  • Java 數(shù)組內(nèi)置函數(shù)toArray詳解

    Java 數(shù)組內(nèi)置函數(shù)toArray詳解

    這篇文章主要介紹了Java 數(shù)組內(nèi)置函數(shù)toArray詳解,文本詳細(xì)的講解了toArray底層的代碼和文檔,需要的朋友可以參考下
    2021-06-06
  • Java動態(tài)代理詳解及實例

    Java動態(tài)代理詳解及實例

    這篇文章主要介紹了Java動態(tài)代理詳解及實例的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • SpringBoot中的@Conditional?注解的使用

    SpringBoot中的@Conditional?注解的使用

    @Conditional是Spring4新提供的注解,它的作用是按照一定的條件進(jìn)行判斷,滿足條件的才給容器注冊Bean,本文主要介紹了SpringBoot中的@Conditional?注解的使用
    2024-01-01
  • 一文帶你學(xué)習(xí)Java多維數(shù)組的使用技巧

    一文帶你學(xué)習(xí)Java多維數(shù)組的使用技巧

    Java作為一門廣泛應(yīng)用于各行各業(yè)的開發(fā)語言,具有豐富的數(shù)據(jù)類型支持,其中多維數(shù)組是其重要的一種,多維數(shù)組可以更加方便地組織數(shù)據(jù),提高Java應(yīng)用程序的效率,本文將為大家介紹Java中多維數(shù)組的基本概念和常用操作,助力讀者更好地掌握多維數(shù)組的使用技巧
    2023-11-11
  • SpringBoot使用Apache POI庫讀取Excel文件的操作詳解

    SpringBoot使用Apache POI庫讀取Excel文件的操作詳解

    在日常開發(fā)中,我們經(jīng)常需要處理Excel文件中的數(shù)據(jù),無論是從數(shù)據(jù)庫導(dǎo)入數(shù)據(jù)、處理數(shù)據(jù)報表,還是批量生成數(shù)據(jù),都可能會遇到需要讀取和操作Excel文件的場景,本文將詳細(xì)介紹如何使用Java中的Apache POI庫來讀取Excel文件,需要的朋友可以參考下
    2025-01-01
  • 深入解析MybatisPlus多表連接查詢

    深入解析MybatisPlus多表連接查詢

    在一些復(fù)雜的業(yè)務(wù)場景中,我們經(jīng)常會遇到多表連接查詢的需求,本文主要介紹了深入解析MybatisPlus多表連接查詢,具有一定的參考價值,感興趣的可以了解一下
    2024-06-06
  • java處理字節(jié)的常用工具類

    java處理字節(jié)的常用工具類

    這篇文章主要為大家詳細(xì)介紹了java處理字節(jié)的常用工具類,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • Java Management Extensions管理擴(kuò)展原理解析

    Java Management Extensions管理擴(kuò)展原理解析

    這篇文章主要介紹了Java Management Extensions管理擴(kuò)展原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • springboot操作阿里云OSS實現(xiàn)文件上傳,下載,刪除功能

    springboot操作阿里云OSS實現(xiàn)文件上傳,下載,刪除功能

    這篇文章主要介紹了springboot操作阿里云OSS實現(xiàn)文件上傳,下載,刪除功能,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • 詳解Java枚舉為什么是單例模式的最佳選擇

    詳解Java枚舉為什么是單例模式的最佳選擇

    這篇文章主要為大家詳細(xì)介紹了Java枚舉為什么是單例模式的最佳選擇,文中通過簡單的示例進(jìn)行了講解,具有一定的學(xué)習(xí)價值,需要的可以參考一下
    2023-05-05

最新評論

平邑县| 甘洛县| 青河县| 博乐市| 全州县| 竹山县| 彭阳县| 满洲里市| 平阳县| 恩平市| 弋阳县| 韶关市| 临泽县| 大渡口区| 尼木县| 西和县| 遂溪县| 开封县| 榆林市| 边坝县| 迁安市| 沧州市| 南涧| 旌德县| 丰宁| 新津县| 绥阳县| 吐鲁番市| 茶陵县| 赤峰市| 榆林市| 克什克腾旗| 沙湾县| 临洮县| 洛南县| 泗洪县| 兴业县| 炉霍县| 高台县| 台南市| 绥宁县|