一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - Java拋出異常與自定義異常類應(yīng)用示例

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

2019-06-24 23:00水中魚之1999 Java教程

這篇文章主要介紹了Java拋出異常與自定義異常類,結(jié)合實(shí)例形式分析了Java針對錯(cuò)誤與異常處理的try、catch、throw等語句相關(guān)使用技巧,需要的朋友可以參考下

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

異常處理常用方法:

常用的異常處理方法有:

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

用途:

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

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

一、try()catch() 語句:

原理剖析:

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

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

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

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

輸出如下:

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

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

二、throw / throws 語句

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

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

這樣一來throw/throws 的用法就顯而易見了。

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

public class ClassText {
    public static void main(String[] args) {
        int radius ;//定義一個(gè)叫做搬進(jìn)的變量作為測試
        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();
        }
    }
}

我們再看看輸出范例:

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

三、自定義異常類

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

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

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

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

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

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

public class ClassText {
    public static void main(String[] args) {
        int textArray[] = new int[3];//用于測試數(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可見 該測試一定越界
            textArray[j] = 5 ;//給數(shù)組原屬賦值
        }
    }
}

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

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

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: fistingvideos头交尿眼 | 2021年国内自拍 | 极品美女写真菠萝蜜视频 | 女人和男人搞鸡 | 成人欧美1314www色视频 | 国产精品 色 | 黑人疯狂巨大xxoo | 国产欧美日韩精品一区二区三区 | 5g影院天天影院天天爽影院网站 | 亚洲福利一区二区 | 青春草视频免费观看 | 甜蜜调教 | 亚洲一级特黄 | 亚洲精品久久久久AV无码 | aa一级护士医生毛片 | 和两个男人玩3p好爽视频 | 大胆国模一区二区三区伊人 | 四虎影音先锋 | 午夜伦伦电影理论片大片 | 国产欧美日韩图片一区二区 | 911福利视频| 国产一级视频在线观看 | 男同精品视频免费观看网站 | 色网免费观看 | gay 男同志被捆绑茎 | 欧美成人aa久久狼窝动画 | 91碰碰| 97午夜视频 | 天天干天天色综合网 | 四虎永久在线精品国产馆v视影院 | 国产夜趣福利第一视频 | 国产小视频在线免费观看 | 精品国产一区二区三区在线观看 | 亚洲欧美视频在线播放 | 日本伊人色综合网 | 高中生放荡日记高h娜娜 | 精品亚洲综合久久中文字幕 | 男女操bb | 超级乱淫伦短篇在车上 | 久久亚洲精选 | 91亚洲精品国产自在现线 |