java8中的異常處理介紹

這篇文章的知識(shí)點(diǎn)包括:異常處理的簡(jiǎn)介、異常處理的工作機(jī)制以及異常處理的使用,閱讀完整文相信大家對(duì)java8中的異常處理有了一定的認(rèn)識(shí)。

企業(yè)建站必須是能夠以充分展現(xiàn)企業(yè)形象為主要目的,是企業(yè)文化與產(chǎn)品對(duì)外擴(kuò)展宣傳的重要窗口,一個(gè)合格的網(wǎng)站不僅僅能為公司帶來巨大的互聯(lián)網(wǎng)上的收集和信息發(fā)布平臺(tái),成都創(chuàng)新互聯(lián)公司面向各種領(lǐng)域:OPP膠袋網(wǎng)站設(shè)計(jì)、營(yíng)銷型網(wǎng)站建設(shè)解決方案、網(wǎng)站設(shè)計(jì)等建站排名服務(wù)。


一、異常概述與異常體系結(jié)構(gòu)

Error:Java虛擬機(jī)無法解決的嚴(yán)重問題:
JVM系統(tǒng)內(nèi)部錯(cuò)誤,資源耗盡,如:StackOverflow \OOM堆棧溢出
處理辦法:只能修改代碼,不能編寫處理異常的代碼
Exception:可以處理的異常
(1)空指針訪問
(2)試圖讀取不存在的文件
(3)網(wǎng)絡(luò)連接中斷
(4)數(shù)組角標(biāo)越界
處理異常的最佳時(shí)間:編譯期間
編譯時(shí)異常----受檢異常-----更嚴(yán)重,執(zhí)行javac.exe命令時(shí)可能出現(xiàn)的異常
運(yùn)行時(shí)異常---非受檢異常---執(zhí)行java.exe命令時(shí),出現(xiàn)的異常---一般也不用try-catch處理(實(shí)際開發(fā)中)
異常的體系結(jié)構(gòu):
java8中的異常處理介紹
常見的異常類型,舉例說明:

java8中的異常處理介紹

/* **************運(yùn)行時(shí)異常************ */
@Test
//ArithmeticException
public void test1(){
    int a=2;
    int b=0;
    System.out.println(a/b);
}

@Test
//InputMismatchException
public void test2(){
    Scanner scanner=new Scanner(System.in);
    int score=scanner.nextInt();
    System.out.println(score);
    scanner.close();
}

@Test
//NullPointerException
public void test3(){
    int[] num=null;
    System.out.println(num[3]);
    String str=null;
    System.out.println(str.length());
}

@Test
//ArrayIndexOutOfBoundsException
//StringIndexOutOfBoundException
public void test4(){
    int[] num = new int[2];
    System.out.println(num[3]);
    String str="abc";
    System.out.println(str.charAt(5));
}

@Test
//ClassCastException
public void test5(){
    Object obj=new Date();
    System.out.println(obj);
    String str=(String)obj;
}

@Test
//NumberFormatException
public void test6(){
    String str="abc";
    System.out.println(Integer.valueOf(str));
}

二、異常處理機(jī)制

1.抓拋模型

拋——程序在正常執(zhí)行的過程中, 一旦出現(xiàn)異常,會(huì)產(chǎn)生并拋出一個(gè)異常類的對(duì)象,之后代碼不執(zhí)行
關(guān)于異常類對(duì)象的產(chǎn)生:(1)系統(tǒng)自動(dòng)生成的異常對(duì)象
(2)手動(dòng)生成一個(gè)異常對(duì)象并拋出throw new 異常名();

抓——處理異常的方式
(1)try-catch-finally
(2)throws 往外拋,最多拋到main就要處理

2.異常處理方式一:try-catch-finally

try{
   // 可能產(chǎn)生異常的代碼
}catch(異常類型1 變量名1){
  //處理異常的方式1
}catch(異常類型2 變量名2){
  //處理異常的方式2
}finally{
  //一定會(huì)執(zhí)行的代碼
}

說明:
(1)finally是可以省略的
(2)使用try將可能產(chǎn)生異常的代碼包裝起來,一旦出現(xiàn)異常,就會(huì)生成一個(gè)對(duì)應(yīng)的異常類對(duì)象
根據(jù)此對(duì)象的類型,去catch中進(jìn)行匹配
(3)一旦try中的異常對(duì)象匹配到某一個(gè)catch,就會(huì)進(jìn)入catch中進(jìn)行異常的處理,一旦處理完成,
就跳出當(dāng)前的try-catch結(jié)構(gòu)(在沒有寫finally時(shí)),繼續(xù)執(zhí)行其后的代碼
(4)catch中的異常類型如果沒有子父類關(guān)系,則誰聲明在上,在下無所謂
catch中的異常類型如果滿足子父類關(guān)系,則要求子類一定聲明在父類的上面,否則會(huì)報(bào)錯(cuò)
(5)常用的異常對(duì)象處理方式:
①String getMessage()
②e.printStackTrace()
(6)在try結(jié)構(gòu)中聲明的變量,出了try結(jié)構(gòu)以后,就不能再被調(diào)用
finally的認(rèn)識(shí)
(1)finally中聲明的語句是一定會(huì)被執(zhí)行的代碼,即使catch中又出現(xiàn)了異常,try中有return,catch種有return語句等
(2)finally中的語句會(huì)在所有return語句執(zhí)行前被執(zhí)行
finally中如果有return,直接執(zhí)行finally中的return
(3)finally的使用場(chǎng)景:
像數(shù)據(jù)庫連接、輸入輸出流、網(wǎng)絡(luò)編程Socket等資源,
JVM是不能自動(dòng)回收的,需要手動(dòng)進(jìn)行資源釋放,就需要聲明在finally中
體會(huì):
(1)使用try-catch-finally處理編譯時(shí)異常,使得程序在編譯時(shí)不再報(bào)錯(cuò),但運(yùn)行時(shí)仍可能報(bào)錯(cuò)
相當(dāng)于shiyongtry-catch-finally將一個(gè)編譯時(shí)可能出現(xiàn)的異常,延遲到運(yùn)行時(shí)出現(xiàn)
(2)開發(fā)中,由于運(yùn)行時(shí)異常比較常見,所以通常不針對(duì)運(yùn)行時(shí)異常編寫try-catch-finally
編譯時(shí)異常,一定要考慮異常處理

3.異常處理方式二:throws+異常類型

  寫在方法的聲明處,指明此方法執(zhí)行時(shí),可能會(huì)拋出的異常類型。一旦當(dāng)方法體執(zhí)行時(shí),出現(xiàn)異常,仍會(huì)在

異常代碼處生成一個(gè)異常類的對(duì)象,此對(duì)象滿足throws后的異常類型時(shí),就會(huì)被拋出。異常代碼后續(xù)的代碼不會(huì)再執(zhí)行。

4.對(duì)比兩種處理方式

try-cathch-finally:真正將異常處理掉了
throws+異常類型:只是將異常拋給了方法的調(diào)用者,并沒有真正將異常處理掉
體會(huì)
(1)父類沒有拋出異常,子類也不能拋異常
(2)子類拋出的異常不大于父類拋出的異常

5.開發(fā)中如何選擇使用try-catch-finally還是throws

(1)如果父類中被重寫的方法沒有throws處理異常,則子類重寫方法也不能用throws
只能用try-catch-finally
(2)執(zhí)行的方法中,先后調(diào)用了另外幾個(gè)方法,這幾個(gè)被調(diào)用的方法是遞進(jìn)關(guān)系執(zhí)行的,
建議使用throws處理這幾個(gè)方法,執(zhí)行方法使用try-catch-finally

三、手動(dòng)拋出異常對(duì)象 throw

1.運(yùn)行時(shí)異??梢圆辉诜椒暶骼飔hrows
2.編譯時(shí)異常需要在方法聲明中拋出

四、用戶自定義異常

1.繼承現(xiàn)有的異常體系結(jié)構(gòu)RuntimeException,Exception
2.提供序列版本號(hào)
3.提供重載的構(gòu)造器

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

throw:拋出一個(gè)異常類的對(duì)象,生成異常對(duì)象的過程聲明在方法體內(nèi)
throws:屬于異常處理的一種方式,在方法聲明處聲明

看完上述內(nèi)容,你們對(duì)java8中的異常處理有進(jìn)一步的了解嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀。

網(wǎng)頁題目:java8中的異常處理介紹
文章源于:http://bm7419.com/article4/jdiioe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、網(wǎng)站設(shè)計(jì)公司、自適應(yīng)網(wǎng)站、用戶體驗(yàn)做網(wǎng)站、搜索引擎優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站