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

Java異常分類處理拋出捕獲操作詳解

 更新時(shí)間:2022年09月21日 09:48:42   作者:白朝槿kk  
異常就是不正常,比如當(dāng)我們身體出現(xiàn)了異常我們會(huì)根據(jù)身體情況選擇喝開(kāi)水、吃藥、看病、等 異常處理方法。 java異常處理機(jī)制是我們java語(yǔ)言使用異常處理機(jī)制為程序提供了錯(cuò)誤處理的能力,程序出現(xiàn)的錯(cuò)誤,程序可以安全的退出,以保證程序正常的運(yùn)行等

什么是異常

“程序運(yùn)行時(shí),發(fā)生的不被期望的事件,它阻止了程序按照程序員的預(yù)期正常執(zhí)行,這就是異常。”

我們?cè)谄綍r(shí)寫(xiě)代碼的過(guò)程中就可能會(huì)遇到異常,給大家給舉一些容易遇到常見(jiàn)的異常例子:

1.算術(shù)異常

Exception in thread “main” java.lang.ArithmeticException: / by zero

在JAVA中,我們都知道0不能作為除數(shù),只能作為被除數(shù),如果把0作為除數(shù),編譯器就會(huì)提示我們出先算術(shù)異常了。

2.數(shù)組越界異常

Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 5

數(shù)組越界,我們應(yīng)該也不陌生,在使用數(shù)組時(shí),如果超過(guò)了數(shù)組的大小,就會(huì)形成越界。程序就會(huì)發(fā)生異常,從而終止運(yùn)行。

3.空指針異常

Exception in thread “main” java.lang.NullPointerException

對(duì)于數(shù)組arr,讓它賦值為null,我并沒(méi)有讓它指向任何對(duì)象,它就是一個(gè)空指針。對(duì)于空指針進(jìn)行訪問(wèn),編譯器就會(huì)提示我們空指針異常。

異常的分類

在代碼運(yùn)行時(shí),可能會(huì)出現(xiàn)異常種類有很多,為了對(duì)不同異?;蛘咤e(cuò)誤進(jìn)行很好的分類管理,Java內(nèi)部維護(hù)了一個(gè)異常的體系結(jié)構(gòu):

圖畫(huà)的不是很好,大家湊合著看吧。下面為大家講解一下這張圖:

1.Throwable類是Java語(yǔ)言中所有錯(cuò)誤(errors)和異常(exceptions)的父類。

2.Error:指的是Java虛擬機(jī)無(wú)法解決的嚴(yán)重問(wèn)題,比如:JVM的內(nèi)部錯(cuò)誤、資源耗盡等。

3.Exception:異常產(chǎn)生后程序員可以通過(guò)代碼進(jìn)行處理,使程序繼續(xù)執(zhí)行。

異常可能在編譯時(shí)發(fā)生,也可能在程序運(yùn)行時(shí)發(fā)生,根據(jù)發(fā)生的時(shí)機(jī)不同,可以將異常分為運(yùn)行時(shí)異常和編譯時(shí)異常。

編譯時(shí)異常

編譯時(shí)異常,也稱為受檢查異常。從名字我們就能夠理解,就是程序在編譯的時(shí)候發(fā)生的異常。

運(yùn)行時(shí)異常

在程序執(zhí)行期間發(fā)生的異常,稱為運(yùn)行時(shí)異常,也稱為非受檢查異常。

編譯時(shí)出現(xiàn)的語(yǔ)法性錯(cuò)誤,不能稱之為異常。編譯過(guò)程中就會(huì)出錯(cuò), 這是 “編譯期” 出錯(cuò)。而運(yùn)行時(shí)指的是程序已經(jīng)編譯通過(guò)得到class 文件了,再由 JVM 執(zhí)行過(guò)程中出現(xiàn)的錯(cuò)誤.

在Java中,異常處理主要的5個(gè)關(guān)鍵字:throw、try、catch、finally、throws

在講異常處理之前,我們先要了解一下異常處理中的關(guān)鍵字,接下來(lái)我會(huì)一一為大家介紹這些關(guān)鍵字。

異常的拋出(throw關(guān)鍵字)

在Java中,可以借助throw關(guān)鍵字,拋出一個(gè)指定的異常對(duì)象,將錯(cuò)誤信息告知給調(diào)用者

使用方法:throw new XXXException(“異常產(chǎn)生的原因”);

例如:

public static void main(String[] args) {
            throw new RuntimeException();
        }

雖然代碼沒(méi)錯(cuò),但是我是使用throw拋出的一個(gè)異常,所以程序就會(huì)反饋給我一個(gè)異常。

給大家總結(jié)一下throw在使用過(guò)程中要注意的一些地方:

  1. throw必須寫(xiě)在方法體內(nèi)部
  2. 拋出的對(duì)象必須是Exception 或者 Exception 的子類對(duì)象
  3. 如果拋出的是 RunTimeException 或者 RunTimeException 的子類,則可以不用處理,直接交給JVM來(lái)處理
  4. 如果拋出的是編譯時(shí)異常,用戶必須處理,否則無(wú)法通過(guò)編譯
  5. 異常一旦拋出,其后的代碼就不會(huì)執(zhí)行

異常的捕獲

異常的捕獲,就是異常的具體處理方式,主要有兩種:異常聲明throws 和try-catch捕獲然后進(jìn)行處理。

throws關(guān)鍵字

throws一般位于方法聲明時(shí)參數(shù)列表之后。

使用方法:修飾符 返回值 方法名(形參)throws 異常類型(可以有多個(gè)異常類型)

聲明的異常必須是 Exception 或者 Exception 的子類

如果有多個(gè)異常,有用逗號(hào)隔開(kāi),如果拋出的異常具有父子類關(guān)系,可以直接throws父類

但是不建議直接用throws父類,范圍太大了。throws對(duì)異常并沒(méi)有真正處理,而是將異常報(bào)告給拋出異常方法的調(diào)用者,由調(diào)用者處理。如果要處理異常就要使用try-catch進(jìn)行處理。

try catch關(guān)鍵字

使用方式如下所示:

public static void main(String[] args) {
            try{
                //代碼
            }catch (){//()里面寫(xiě)你想捕捉的異常
                //處理異常的代碼
            }catch (){
				//同上
            }
        }

1.try里面的代碼不一定會(huì)發(fā)生異常。

2.如果代碼發(fā)生了異常,且被catch捕獲到了,就會(huì)進(jìn)行對(duì)應(yīng)的處理,處理完成后就會(huì)跳出try-catch執(zhí)行后面的語(yǔ)句。

3.如果代碼發(fā)生了異常,但不是寫(xiě)catch語(yǔ)句預(yù)期捕捉的異常的話,那么這個(gè)異常不會(huì)捕捉到,后面的代碼就不會(huì)被執(zhí)行。

4.try-catch可以捕捉多個(gè)異常,但不是同時(shí)捕獲。如果有多個(gè)異常,只能逐個(gè)捕獲。

5.如果有多個(gè)異常,并且有父子類關(guān)系,可以直接寫(xiě)Exception,因?yàn)樗撬挟惓5母割悾且膊唤ㄗh這么寫(xiě),因?yàn)镋xception的范圍太廣了,因?yàn)槊總€(gè)異常處理的方法不一樣。

6.如果使用Exception,那么在寫(xiě)catch的時(shí)候,要么只寫(xiě)一個(gè)catch語(yǔ)句,里面放Exception,后面就不能繼續(xù)寫(xiě)catch語(yǔ)句了,因?yàn)閷?xiě)了也沒(méi)什么用,而且出現(xiàn)的異常都會(huì)被Exception進(jìn)行捕獲。要么就把Exception放在最后寫(xiě),前面寫(xiě)你想捕獲的異常,在最后再使用Exception。

7.try里面拋出異常位置之后的代碼將不會(huì)被執(zhí)行

finally關(guān)鍵字

finally的使用很簡(jiǎn)單,使用方式如下:

 public static void main(String[] args) {
            try{
                //代碼
            }catch (RuntimeException e){
                //()里面寫(xiě)你想捕捉的異常
                //處理異常的代碼
            }catch (Exception e){
				//同上
            } finally{
        		//代碼
         }
    }

finally的作用:finally后面的代碼一定會(huì)執(zhí)行

前面講了try-catch用來(lái)捕獲并處理異常,但是有時(shí)發(fā)生的異常并沒(méi)有被捕捉到,那么程序也會(huì)發(fā)生異常終止,但用戶在使用的時(shí)候發(fā)生異常并終止程序,我們也需要對(duì)此進(jìn)行進(jìn)行一定的處理,就可以使用finally關(guān)鍵字,無(wú)論有沒(méi)有發(fā)生異常,finally內(nèi)的代碼也一定會(huì)執(zhí)行。

總結(jié)

異常處理的流程

  1. 程序先執(zhí)行 try 中的代碼
  2. 如果 try 中的代碼出現(xiàn)異常, 就會(huì)結(jié)束 try 中的代碼, 看和 catch 中的異常類型是否匹配.
  3. 如果找到匹配的異常類型, 就會(huì)執(zhí)行 catch 中的代碼
  4. 如果沒(méi)有找到匹配的異常類型, 異常得不到處理,就會(huì)交給JVM處理,程序就會(huì)異常終止.
  5. 無(wú)論是否找到匹配的異常類型, finally 中的代碼都會(huì)被執(zhí)行到(在該方法結(jié)束之前執(zhí)行).

除此之外,大家也要熟練掌握異常的種類和throw、try、catch、finally、throws這幾個(gè)關(guān)鍵字的用法。

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

相關(guān)文章

  • Java中的FutureTask源碼解析

    Java中的FutureTask源碼解析

    這篇文章主要介紹了Java中的FutureTask源碼解析,FutureTask是一個(gè)可取消的異步計(jì)算,這個(gè)類是Future的實(shí)現(xiàn)類,有開(kāi)始和取消一個(gè)計(jì)算的方法,如果一個(gè)計(jì)算已經(jīng)完成可以查看結(jié)果,需要的朋友可以參考下
    2023-12-12
  • fastJson泛型如何轉(zhuǎn)換的實(shí)現(xiàn)

    fastJson泛型如何轉(zhuǎn)換的實(shí)現(xiàn)

    這篇文章主要介紹了fastJson泛型如何轉(zhuǎn)換的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 分隔List集合,按指定大小,將集合分成多個(gè)的方法

    分隔List集合,按指定大小,將集合分成多個(gè)的方法

    下面小編就為大家?guī)?lái)一篇分隔List集合,按指定大小,將集合分成多個(gè)的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-03-03
  • JAVA調(diào)用JavaScript方法代碼示例

    JAVA調(diào)用JavaScript方法代碼示例

    我們都知道腳本語(yǔ)言非常靈活,在處理某些問(wèn)題的時(shí)候Java實(shí)現(xiàn)用十幾行來(lái)寫(xiě),用js可能不到十行就寫(xiě)完,并且非常簡(jiǎn)潔,這篇文章主要給大家介紹了關(guān)于JAVA調(diào)用JavaScript方法的相關(guān)資料,需要的朋友可以參考下
    2023-10-10
  • SpringBoot項(xiàng)目中出現(xiàn)不同端口跨域問(wèn)題的解決方法

    SpringBoot項(xiàng)目中出現(xiàn)不同端口跨域問(wèn)題的解決方法

    這篇文章主要介紹了SpringBoot項(xiàng)目中出現(xiàn)不同端口跨域問(wèn)題的解決方法,文中介紹了兩種解決方法,并給出了詳細(xì)的代碼供大家參考,具有一定的參考價(jià)值,需要的朋友可以參考下
    2024-03-03
  • springboot 使用yml配置文件給靜態(tài)變量賦值教程

    springboot 使用yml配置文件給靜態(tài)變量賦值教程

    這篇文章主要介紹了springboot 使用yml配置文件給靜態(tài)變量賦值教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • Mybatis學(xué)習(xí)總結(jié)之mybatis使用建議

    Mybatis學(xué)習(xí)總結(jié)之mybatis使用建議

    這篇文章主要介紹了Mybatis學(xué)習(xí)總結(jié)之mybatis使用建議的相關(guān)資料,非常具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-05-05
  • 使用Java填充Word模板的方法詳解

    使用Java填充Word模板的方法詳解

    Java填充Word模板是一種將動(dòng)態(tài)數(shù)據(jù)插入到Word文檔模板中生成最終文檔的過(guò)程,通常用于批量創(chuàng)建包含個(gè)人信息、報(bào)告結(jié)果或其他動(dòng)態(tài)內(nèi)容的文檔,本文給大家介紹了使用Java填充Word模板的方法,需要的朋友可以參考下
    2024-07-07
  • 如何使用Java統(tǒng)計(jì)gitlab代碼行數(shù)

    如何使用Java統(tǒng)計(jì)gitlab代碼行數(shù)

    這篇文章主要介紹了如何使用Java統(tǒng)計(jì)gitlab代碼行數(shù),實(shí)現(xiàn)方式通過(guò)git腳本將所有的項(xiàng)目拉下來(lái)并然后通過(guò)進(jìn)行代碼行數(shù)的統(tǒng)計(jì),需要的朋友可以參考下
    2023-10-10
  • Java中Map與JSON數(shù)據(jù)之間的互相轉(zhuǎn)化

    Java中Map與JSON數(shù)據(jù)之間的互相轉(zhuǎn)化

    我們?cè)陂_(kāi)發(fā)中難免和JSON打交道,這不小編最近遇到了,需要把一些信息轉(zhuǎn)成JSON字符串,下面這篇文章主要給大家介紹了關(guān)于Java中Map與JSON數(shù)據(jù)之間的互相轉(zhuǎn)化,需要的朋友可以參考下
    2023-04-04

最新評(píng)論

绥芬河市| 黄浦区| 庄河市| 甘南县| 蓝山县| 怀集县| 珲春市| 玛纳斯县| 四会市| 灵武市| 灵宝市| 呈贡县| 中超| 凯里市| 长阳| 邢台县| 甘谷县| 府谷县| 香河县| 十堰市| 钦州市| 胶州市| 同德县| 台前县| 长治市| 莆田市| 余干县| 宜良县| 兴和县| 樟树市| 兴安县| 宁晋县| 香港 | 福安市| 铁岭市| 双牌县| 怀集县| 岗巴县| 名山县| 安塞县| 裕民县|