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

Java拋出異常與自定義異常類(lèi)應(yīng)用示例

 更新時(shí)間:2019年03月14日 08:49:13   作者:水中魚(yú)之1999  
這篇文章主要介紹了Java拋出異常與自定義異常類(lèi),結(jié)合實(shí)例形式分析了Java針對(duì)錯(cuò)誤與異常處理的try、catch、throw等語(yǔ)句相關(guān)使用技巧,需要的朋友可以參考下

本文實(shí)例講述了Java拋出異常與自定義異常類(lèi)。分享給大家供大家參考,具體如下:

異常處理常用方法:

常用的異常處理方法有:

  • 一、try()catch() 語(yǔ)句
  • 二、throw / throws 語(yǔ)句
  • 三、自定義異常類(lèi)

用途:

眾所周知,當(dāng)程序運(yùn)行過(guò)程中,如果遇到了錯(cuò)誤(比如數(shù)組下標(biāo)越界,空指針等)程序就會(huì)自動(dòng)終止,但這種錯(cuò)誤一般是偶然的,可能是用戶(hù)輸入不呵呵程序編寫(xiě)者的意圖導(dǎo)致,而不是程序本身問(wèn)題,這是我們要做的,是讓操作者知道發(fā)生了什么事情,而不是直截了當(dāng)?shù)慕Y(jié)束程序,這時(shí)我們就用到了異常處理(語(yǔ)句發(fā)生錯(cuò)誤時(shí),只拋出異常,而不結(jié)束程序)。

這里一源碼為例 詳細(xì)介紹一下:

一、try()catch() 語(yǔ)句:

原理剖析:

將可能發(fā)生異常的語(yǔ)句放在 tr() 中,運(yùn)行到try這一行時(shí),如果無(wú)異常,則正常執(zhí)行 try() 中語(yǔ)句,執(zhí)行完 try() 內(nèi)語(yǔ)句之后,程序自動(dòng)跳過(guò) catch() 語(yǔ)句,去執(zhí)行 catch() 之后的語(yǔ)句。

反之,如果在執(zhí)行 try() 內(nèi)語(yǔ)句時(shí),出現(xiàn)異常情況,則執(zhí)行跳轉(zhuǎn)到catch()語(yǔ)句中,進(jìn)行異常處理,一處處以之后不再回到try的()內(nèi),而是結(jié)束try()catch()內(nèi)的所有操作,去運(yùn)行后面的catch語(yǔ)句后面的語(yǔ)句。

舉個(gè)例子就明白了:

public class ClassText {
    public static void main(String[] args) {
        int textArray[] = new int[3];//用于測(cè)試數(shù)組越界異常的數(shù)組
        int j;//用來(lái)使數(shù)組月結(jié)的下標(biāo)
        try {
            for ( j = 0; j < (textArray.length + 1); j++) {//有+1可見(jiàn) 該測(cè)試一定越界
                textArray[j] = (int) Math.random()*10 ;
            }
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
        System.out.println("但是上面拋出異常后\n程序并沒(méi)有直接結(jié)束\n"
                + "而是跳出try()catch()語(yǔ)句\n正常執(zhí)行本條輸出語(yǔ)句");
    }
}

輸出如下:

可以看到,發(fā)生異常后依然執(zhí)行了后面的輸出語(yǔ)句。

二、throw / throws 語(yǔ)句

很多出初學(xué)者一直把throw / throws 語(yǔ)句,看作兩種不同的異常處理方法,其實(shí)他們可以看作一個(gè)整體,throw語(yǔ)句可以看作異常的處理語(yǔ)句,而throws我們則可以將其類(lèi)比為‘extends' 它的主要作用是聲明該方法(體內(nèi)存在throw語(yǔ)句的方法,需要throws或者說(shuō)我們可以看作需要‘繼承/鏈接',該異常類(lèi)型的原型),舉個(gè)例子大家就明白了:

private static void textThrow_Throws(int radius) throws Exception {
    if ( radius < 0 ) {//如果半徑小于0 則不符合常理進(jìn)行異常處理
        throw new Exception();
    }
}

這樣一來(lái)throw/throws 的用法就顯而易見(jiàn)了。

但是在寫(xiě)完throw/throws 語(yǔ)句后,異常處理并沒(méi)有結(jié)束,因?yàn)檫@里只是簡(jiǎn)單聲明了,我的這個(gè)成員方法中的可能會(huì)拋出異常,并沒(méi)有寫(xiě)具體該如何處理這個(gè)異常,所以這是在主函數(shù)中,就要用try()catch()將他們包圍。描述好具體的處理異常方法:完整測(cè)試代碼如下:

public class ClassText {
    public static void main(String[] args) {
        int radius ;//定義一個(gè)叫做搬進(jìn)的變量作為測(cè)試
        radius = -5;//常理可知半徑使正數(shù)
        try {
            textThrow_Throws(radius);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("程序正常結(jié)束~");
    }
    private static void textThrow_Throws(int radius) throws Exception {
        if ( radius < 0 ) {//如果半徑小于0 則不符合常理進(jìn)行異常處理
            throw new Exception();
        }
    }
}

我們?cè)倏纯摧敵龇独?/p>

三、自定義異常類(lèi)

自定義異常類(lèi)是逃不開(kāi),也是新手接觸最少的,其實(shí)它的基本使用方法還是很簡(jiǎn)單的,自定義異常處理類(lèi),只包括兩部分:(1)、類(lèi)的構(gòu)造方法,構(gòu)造方法的建立則非常簡(jiǎn)單,其實(shí)只要繼承父類(lèi)(比如 Exception類(lèi) )的構(gòu)造方法即可。(2)、重寫(xiě)toString()函數(shù),這是最重要的一點(diǎn),再toString函數(shù)中,描述具體發(fā)生了什么錯(cuò)誤導(dǎo)致了異常的拋出。這樣一來(lái)用戶(hù)才知道究竟是發(fā)生了什么錯(cuò)誤

這里結(jié)合throw/throws 舉個(gè)例子就很好明白了:

1.首先自定義一個(gè)異常類(lèi):

public class ArrayIndexException extends Exception{
    public ArrayIndexException() {
        // TODO Auto-generated constructor stub
        super();
    }
    @Override
    public String toString() {
        // TODO Auto-generated method stub
        return"程序發(fā)生了越界異常! 請(qǐng)檢查下標(biāo)變化!";
    }
}

如上所示就是一個(gè)最基本的自定義異常類(lèi) ,它繼承了Exception 并且重寫(xiě)了構(gòu)造方法以及toString方法

2.現(xiàn)在我們嘗試再主函數(shù)中調(diào)用它

public class ClassText {
    public static void main(String[] args) {
        int textArray[] = new int[3];//用于測(cè)試數(shù)組越界異常的數(shù)組
        try {
            textSetArray(textArray);//調(diào)用下方數(shù)組賦值方法
        } catch (ArrayIndexException e) {
            // TODO: handle exception
            e.printStackTrace();//如果發(fā)生了異常 則拋出自定義數(shù)組越界異常
        }
        System.out.println("go on !");
        for(int j = 0 ; j < textArray.length ; j++ )
            System.out.print(textArray[j] + "\t");//再越界之前的數(shù)成功賦值
    }
    private static void textSetArray(int[] textArray) throws ArrayIndexException{
        for ( int j = 0; j < (textArray.length + 1); j++) {//有+1可見(jiàn) 該測(cè)試一定越界
            textArray[j] = 5 ;//給數(shù)組原屬賦值
        }
    }
}

如上所示,如果發(fā)生了異常,這才catch()語(yǔ)句中聲稱(chēng)自定義的異常對(duì)象,并輸出具體信息:

java異常的處理大概就這些類(lèi)型,如果有疑問(wèn)可以給我留言我再完善。

更多java相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《Java面向?qū)ο蟪绦蛟O(shè)計(jì)入門(mén)與進(jìn)階教程》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總

希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • jwt生成token和token解析基礎(chǔ)詳解

    jwt生成token和token解析基礎(chǔ)詳解

    這篇文章主要為大家介紹了jwt生成token和token解析基礎(chǔ),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • 實(shí)例講述Java IO文件復(fù)制

    實(shí)例講述Java IO文件復(fù)制

    本篇文章通過(guò)實(shí)例給大家詳細(xì)講述Java IO文件復(fù)制的相關(guān)知識(shí)點(diǎn),需要的讀者們學(xué)習(xí)下吧。
    2018-02-02
  • java解析json數(shù)組方式

    java解析json數(shù)組方式

    這篇文章主要介紹了java解析json數(shù)組方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Java中的==使用方法詳解

    Java中的==使用方法詳解

    這篇文章主要給大家介紹了關(guān)于Java中的==使用方法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-09-09
  • 詳解Java如何實(shí)現(xiàn)基于Redis的分布式鎖

    詳解Java如何實(shí)現(xiàn)基于Redis的分布式鎖

    在不同進(jìn)程需要互斥地訪(fǎng)問(wèn)共享資源時(shí),分布式鎖是一種非常有用的技術(shù)手段。這篇文章運(yùn)用圖文和實(shí)例代碼介紹了Java如何實(shí)現(xiàn)基于Redis的分布式鎖,文章介紹的很詳細(xì),對(duì)Java和Redis剛興趣的朋友們可以參考借鑒,下面來(lái)一起看看。
    2016-08-08
  • mybatis-plus分頁(yè)插件失效探究解決

    mybatis-plus分頁(yè)插件失效探究解決

    這篇文章主要為大家介紹了mybatis-plus分頁(yè)插件失效探究解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • 解決IDEA?2022?Translation?翻譯文檔失敗:?未知錯(cuò)誤的問(wèn)題

    解決IDEA?2022?Translation?翻譯文檔失敗:?未知錯(cuò)誤的問(wèn)題

    這篇文章主要介紹了IDEA?2022?Translation?翻譯文檔失敗:?未知錯(cuò)誤,本文較詳細(xì)的給大家介紹了IDEA?2022?Translation未知錯(cuò)誤翻譯文檔失敗的解決方法,需要的朋友可以參考下
    2022-04-04
  • 詳解如何修改idea配置文件位置從C盤(pán)更改到D盤(pán)

    詳解如何修改idea配置文件位置從C盤(pán)更改到D盤(pán)

    這篇文章主要給大家介紹了關(guān)于如何將idea的配置文件從默認(rèn)的C盤(pán)調(diào)整到D盤(pán),從而節(jié)省C盤(pán)使用空間,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,需要的朋友可以參考下
    2023-10-10
  • java  線(xiàn)程詳解及線(xiàn)程與進(jìn)程的區(qū)別

    java 線(xiàn)程詳解及線(xiàn)程與進(jìn)程的區(qū)別

    這篇文章主要介紹了java 線(xiàn)程詳解及線(xiàn)程與進(jìn)程的區(qū)別的相關(guān)資料,網(wǎng)上關(guān)于java 線(xiàn)程的資料很多,對(duì)于進(jìn)程的資料很是,這里就整理下,需要的朋友可以參考下
    2017-01-01
  • Java中八大包裝類(lèi)舉例詳解(通俗易懂)

    Java中八大包裝類(lèi)舉例詳解(通俗易懂)

    這篇文章主要介紹了Java中的包裝類(lèi),包括它們的作用、特點(diǎn)、用途以及如何進(jìn)行裝箱和拆箱,包裝類(lèi)還提供了許多實(shí)用方法,如轉(zhuǎn)換、獲取基本類(lèi)型值、比較和類(lèi)型檢測(cè),文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-02-02

最新評(píng)論

龙山县| 红桥区| 塔河县| 文化| 安龙县| 灵山县| 安西县| 万载县| 台中县| 涟水县| 永德县| 东海县| 洞口县| 犍为县| 黔西县| 阳高县| 沂水县| 沐川县| 东至县| 札达县| 宜兰市| 孟村| 九龙城区| 五常市| 舞阳县| 怀远县| 车致| 班玛县| 伊宁县| 洱源县| 吐鲁番市| 定西市| 额尔古纳市| 巴楚县| 洛扎县| 玛多县| 兴安盟| 碌曲县| 大邑县| 凌海市| 台山市|