亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發(fā) > Java > 正文

Java異常處理之try...catch...finally詳解

2024-07-14 08:43:26
字體:
供稿:網(wǎng)友

異常處理機制已經(jīng)成為判斷一門編程語言是否成熟的標準之一,其對代碼的健壯性有很大影響。一直以來異常處理使用不是很得心應(yīng)手,今天對異常進行了較為深入的學習,這篇主要是對try…catch…finally的一個總結(jié)。

一.java繼承體系

Java語言為異常處理提供了豐富的異常類,這些類之間有嚴格的繼承關(guān)系。如圖:

Java,異常處理,try,catch,finally

從圖中我們可以看出,所有的類都是繼承于Throwable這個父類,java將所有的非正常情況分為兩種:Error(錯誤)和Exception(異常),Error錯誤一般是于虛擬機相關(guān)的問題,如系統(tǒng)崩潰、虛擬機錯誤、動態(tài)鏈接失敗等,這種錯誤是無法恢復或不可能捕獲的,而我們能處理的是Exception類下的錯誤。Exception則分為兩大類,RuntimeException(運行時異常)和其他異常(Checked異常),其他異常(Checked異常)是各種形式的編譯錯誤,是我們必須顯示處理才可以通過變異的;而運行時錯誤顧名思義就是程序已經(jīng)通過了編譯,在運行時出現(xiàn)的錯誤,若是對這些異常置之不理會導致程序停止運行、占用資源無法釋放甚至導致系統(tǒng)崩潰。

二.java異常處理機制及實現(xiàn)方法

1.主要依賴于try、catch、finally、throw和throws這五個關(guān)鍵字。(throw和throws本篇不涉及)

2.try…catch…finally處理機制:try關(guān)鍵字后跟一個花括號栝起的代碼塊(即使該代碼塊只有一行也不能省略花括號),簡稱try塊。catch對應(yīng)異常類型和代碼塊,用于表明更改catch塊用于處理該種類型的異常。一個try塊后可以跟多個catch塊。在catch塊后還可以跟一個finally塊,finally塊用于回收在try塊里打開的資源。

這樣講過于抽象,那我們看幾個例子:

e.g.1 try…catch語句塊

//功能:對輸入的兩個數(shù)進行相除運算public class DivTest {  public static void main(String[] args) {    try {      int a = Integer.parseInt(args[0]);      int b = Integer.parseInt(args[1]);      int c = a/b;      System.out.println("您輸入的兩個數(shù)相除的結(jié)果是:" + c);    } catch(IndexOutOfBoundsException ie) {      System.out.println("數(shù)組越界");    } catch(NumberFormatException ne) {      System.out.println("數(shù)字格式異常");    } catch(ArithmeticException ae) {      System.out.println("算術(shù)異常");    } catch(Exception e) {      System.out.println("未知異常");    }   }}

以上代碼我們看到,對不同的異常情況作了不同的處理:輸入?yún)?shù)不夠會發(fā)生數(shù)組越界異常、輸入?yún)?shù)不是數(shù)字發(fā)生數(shù)字格式異常、若輸入第二個數(shù)是0,則發(fā)生除0異常,調(diào)用算術(shù)異常進行處理、出現(xiàn)其他異常時那么該異常對象必定是Exception類或其子類的實例,java調(diào)用Exception類對其進行處理,前三種異常類均是RuntimeException的子類。在使用try…catch語句塊時需要知道或注意以下幾點:

1) 處理過程:代碼在執(zhí)行的時候,進入try塊,若是在try塊中出現(xiàn)了異常,系統(tǒng)會自動生成一個一場對象,該對象被提交給java運行時環(huán)境,這就是異常的拋出;在java運行時環(huán)境收到異常對象時則把該對象交給catch塊處理,這個過程叫做異常的捕獲;若找到相應(yīng)的catch塊就執(zhí)行catch塊中的代碼,若沒有找到,則運行時環(huán)境終止,程序也退出。 

2) 執(zhí)行一次try塊只執(zhí)行一個catch塊 

3) 有多個catch塊并有繼承關(guān)系的情況下必須先寫子類后寫父類(即先捕獲小異常再捕獲大異常),若寫反在編譯時就會報錯 

4) Java7提供的多異常捕獲:在Java7之前,每一個catch塊只能捕獲一種異常,但從java7開始,一個catch塊可以捕獲多種類型的異常。在使用多異常捕獲應(yīng)注意兩點:

  • (1) 多種異常之間用豎線( | )隔開 
  • (2) 多種異常對象被final隱式修飾,因此程序不能對其重新賦值

以下代碼是多異常捕獲的例子:

e.g.2

//多異常捕獲public class MultiExceptionTest {  public static void main(String[] args) {    try {      int a = Integer.parseInt(args[0]);      int b = Integer.parseInt(args[1]);      int c = a/b;      System.out.println("您輸入的兩個數(shù)相除的結(jié)果是:" + c);    } catch(IndexOutOfBoundsException|NumberFormatException|    ArithmeticException ie) {      System.out.println("數(shù)組越界或數(shù)字格式異?;蛩阈g(shù)異常");      ie = new ArithmeticExcrption("test");  //①    } catch(Exception e) {      System.out.println("未知異常");      e = new RuntimeException("test");  //②    }   }}

可以看出,以上代碼中,①號代碼是錯誤的,因為ie是被final隱式修飾的對象,②號代碼是正確的

3. 使用finally回收資源:有些時候我們在try塊中打開了一些物理資源(例如數(shù)據(jù)庫鏈接、網(wǎng)絡(luò)連接和磁盤文件等),這些資源都應(yīng)進行顯示回收。有人說java不是有垃圾回收機制嗎?java的垃圾回收機制是自動回收堆內(nèi)存中對象所占用的內(nèi)存,而物理資源是不會自動回收的。

finally重點學習以下幾點:

  • 1) 執(zhí)行過程以及引入finally的原因:finally最后執(zhí)行并且最后執(zhí)行,物理資源回收放在finally塊中的原因就是finally塊一定會被執(zhí)行。相反,若是放在try塊中,在執(zhí)行之前就出現(xiàn)異常則跳轉(zhuǎn)至catch塊中,則回收資源的代碼不會被執(zhí)行;同樣的,若是放在catch塊中,若不發(fā)生異常,那么catch塊就不會被執(zhí)行
  • 2) 若是在catch快中有return語句,則先執(zhí)行完finally中的程序后再回到catch塊中并執(zhí)行return語句
  • 3) 若是在finally中有return語句,那么try塊和catch塊中的return語句都會失效,不會被執(zhí)行
  • 4) 若在catch塊中強制退出虛擬機,如使用System.exit(1)語句,則會直接退出程序,finally也不會得到執(zhí)行

e.g.3

//該類功能:打開a.txt文件,在finally塊中對資源進行回收/* 對代碼中一些方法的解釋: * 所有異常都包含以下幾種訪問異常信息的常用方法: * getMessage():返回該異常的詳細描述字符串 * printStackTrace():將該異常的跟蹤棧信息輸出到標準錯誤輸出 * printStaceTrace(PrintStack s):將該異常的跟蹤棧信息到執(zhí)行輸出流 * getStackTrace():返回該異常的跟蹤棧信息 **/public class FinallyTest {  public static void main(String[] args) {    FileInputStream fis = null;    try {      fis = new FileInputStream("a.txt");    }catch(IOException ioe) {      System.out.println(ioe.getMessage());      return;      //①      System.exit(1);  //②    }finally {      if(fis != null) {        try{          fis.close();        }catch(IOException ioe) {          ioe.printStackTrace();        }      }      System.out.println("執(zhí)行finally塊里的資源回收!");    }  }}

注釋掉②號代碼運行以上程序,我們看到的結(jié)果是:

a.txt (系統(tǒng)找不到該文件。)
程序已經(jīng)執(zhí)行了finally里的資源回收!

注釋掉①號代碼運行以上程序,我們看到的結(jié)果是:

a.txt (系統(tǒng)找不到該文件。)

4. 嵌套

例如e.g.3代碼所示,finally塊中還嵌套了一個try…catch語句塊,這種在try塊、catch塊或finally塊中包含完整的異常處理流程的情形被稱為異常的嵌套。一般對嵌套深度沒有限制,但是層次太深的嵌套會降低可讀性。

5.Java7的自動關(guān)閉資源的try語句:

在java7之前,我們必須像e.g.3中的代碼一樣手動關(guān)閉文件,回收資源。在Java7中增強了try語句的功能,它允許在try關(guān)鍵字后緊跟一對圓括號,圓括號可以聲明、初始化一個或多個資源,此處的資源指的是那些必須在程序結(jié)束時顯示關(guān)閉的資源,try語句在該語句結(jié)束時自動關(guān)閉這些資源。這些資源實現(xiàn)類必須實現(xiàn)AutoCloseable或Closeable接口,實現(xiàn)這兩個接口就必須實現(xiàn)close()方法。

注:Closeable是AutoCloseable接口的子接口,Closeable接口里的close()方法聲明拋出了IOException,因此它的實現(xiàn)類在實現(xiàn)close()方法時只能聲明拋出IOException或其子類;AutoCloseable接口里的close()方法聲明拋出了Exception,因此它的實現(xiàn)類在實現(xiàn)close()方法時能拋出任何異常。Java7幾乎把所有的“資源類”(包括文件IO的各種類、JDBC編程的Connection、Statement等接口)進行了改寫,改寫后的資源類都實現(xiàn)了AutoCloseable或Closeable接口

e.g.4

//使用自動回收資源的try語句public class AutoCloseTest {  public static void main(String[] args) throws IOException {    try(    //聲明、初始化兩個可關(guān)閉的資源,try語句會自動關(guān)閉這兩個資源    BufferedReader br = new BufferedReader(    new FileReader("AutoCloseTest.java"));    PrintStream ps = new PrintStream(    new FileOutputStream("a.txt"))) {      //使用兩個資源      System.out.println(br.readLine());      ps.println("自動關(guān)閉資源的try語句")    }  }}

以上try語句塊后的圓括號中聲明、初始化了兩個IO流,由于BufferedReader、PrintStream都實現(xiàn)了Closeable接口,所以try語句會自動關(guān)閉它們。自動關(guān)閉資源的try語句塊相當于包含了隱式的finally塊用于關(guān)閉資源,這個try語句可以沒有catch塊也可以沒有finally塊,大大減少了代碼的長度。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VeVb武林網(wǎng)的支持。


注:相關(guān)教程知識閱讀請移步到JAVA教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
牛人盗摄一区二区三区视频| 性生活视频网址| 欧美激情在线一区二区| 国产二级一片内射视频播放| 亚洲成人黄色影院| 亚洲综合日本| 日本激情一区| 影音先锋男人每日资源站| 综合久久综合| 九九久久国产| 国产私拍精品| 嫩草av久久伊人妇女超级a| 欧美精品xxx| 亚洲色图视频网站| 日韩免费av在线| 国产精品腿扒开做爽爽爽挤奶网站| 菠萝蜜影院一区二区免费| 亚洲乱码一区二区三区| 亚洲 激情 在线| 成人免费精品动漫网站| 日本福利视频在线| www.中文字幕av| 国产无套内射又大又猛又粗又爽| 97人妻精品一区二区三区软件| 精品国产亚洲一区二区三区在线| 日韩在线亚洲| 永久看片925tv| 99久久er| 国产亚洲欧洲高清| 亚洲天堂视频在线播放| 91视频导航| h视频在线观看网站| 亚洲精品成人精品456| 久青草视频在线播放| 北条麻妃高清一区| 国产专区一区二区三区| 国产精品96久久久久久| 中文字幕专区| 国产欧美日韩成人| 日本亚洲欧美天堂免费| 久久亚洲精品欧美| 欧美情侣在线播放| 一本色道综合久久欧美日韩精品| 久久国产精品亚洲人一区二区三区| 日本黄色小视频在线观看| 国产精品二区一区二区aⅴ污介绍| 国产一区二区三区站长工具| 欧美写真视频网站| 久久青青视频| 嫩草香蕉在线91一二三区| 欧美日韩一区二区在线播放| 一卡二卡三卡四卡五卡| 二区在线播放| 日韩av片在线播放| 亚洲娇小xxxx欧美娇小| 嗯啊主人调教在线播放视频| 免费男女羞羞的视频网站中文字幕| 色av一区二区三区| 国产乱视频在线观看播放| 丰满圆润老女人hd| 国产露出视频在线观看| 亚洲美女av网站| 欧美激情欧美| 欧美美女一区二区在线观看| 91老师国产黑色丝袜在线| 中文在线免费看视频| 青青草免费在线视频观看| 精品国产乱码| 色婷婷久久综合中文久久蜜桃av| 欧美日韩二三区| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 91涩漫在线观看| 欧美丝袜丝交足nylons| 国产日产高清欧美一区二区三区| 欧美黄色性视频| www.久久久久爱免| 最新国产精品久久精品| 日本中文字幕在线视频观看| 国产免费一区二区三区网站免费| 国产美女被遭强高潮免费网站| 香蕉视频一区二区| 欧美日韩高清在线观看| 欧美在线精品一区| 怡红院男人的天堂| 99国产精品免费网站| 国产精品国产馆在线真实露脸| 日本高清视色| 欧美日韩国产一区精品一区| 国产福利微拍精品一区二区| 久久国产精品久久国产精品| 不卡亚洲精品| 欧美在线视频免费播放| 国内精品美女在线观看| 4k岛国日韩精品**专区| 91网站视频在线观看| 亚洲精品久久一区二区三区777| 日韩有码中文字幕在线| 西西裸体人体做爰大胆久久久| 欧美日韩激情在线一区二区三区| 亚洲日本欧美日韩高观看| 天天影院图片亚洲| 日本一级黄色大片| 91精品国产色综合久久不卡电影| 99久久99久久精品免费| 日本v片在线高清不卡在线观看| 精品无人区一区二区三区| 丰满少妇被猛烈进入高清播放| 天天操夜夜爽| 欧美精品亚洲一区二区在线播放| 精品日产乱码久久久久久仙踪林| 5g成人永久免费影院| 亚洲精品乱码久久久久久黑人| 日韩一级在线视频| 九色porny自拍视频在线播放| 日韩大胆视频| 日韩欧美精品网站| 欧美国产视频一区| 久久久久亚洲av成人无码电影| 精东影业在线观看| 亚洲一区二区欧美日韩| 精品国产依人香蕉在线精品| 日韩电影网址| 大桥未久女教师av一区二区| 一本一本久久a久久精品综合妖精| 精品视频在线观看一区二区| jizzjizzjizz美国| 婷婷国产成人精品视频| 国产人妻精品久久久久野外| 精品无码一区二区三区| 国产原创精品| 亚洲社区在线| 亚洲尤物在线| 国产成人一区三区| 丝袜美腿一区二区三区动态图| 丝袜国产免费观看| av电影在线观看不卡| 国产精品自拍合集| 狠狠色丁香久久综合频道| 欧美精品乱码| 欧美爱爱小视频| 99视频精品视频高清免费| 精品性高朝久久久久久久| 免费a在线观看播放| 7777久久亚洲中文字幕| 国产精品你懂的在线观看| 男人天堂资源在线| 日本黄色成人| 激情综合中文娱乐网| 精品无码人妻一区二区三区| 7777精品久久久大香线蕉| 丰满少妇高潮在线观看| 自拍偷拍欧美一区| 午夜久久资源| 国产日本在线观看| 中文字幕一区二区三区精品| 最新中文字幕av| 欧美自拍视频在线| 97aⅴ精品视频一二三区| 亚洲不卡免费视频| 无码国产精品一区二区色情男同| 亚洲第一国产精品| 久久免费精品国产久精品久久久久| 欧美丰满一区二区免费视频| 成年永久一区二区三区免费视频| 成年人免费在线视频网站| 国产精品jizz视频| 日韩毛片无码永久免费看| 美女一区二区三区在线观看| 亚洲午夜三级在线| 色偷偷亚洲第一成人综合网址| 在线观看你懂得| 日韩中文不卡| 亚洲性感美女99在线| 久久久久免费精品国产| 成人精品小蝌蚪| 性生活一级大片| 日本精品久久电影| 亚洲国产中文字幕久久网| 午夜免费福利网站| 97在线视频免费观看完整版| 亚洲在线国产日韩欧美| 狠狠做深爱婷婷久久综合一区| 蜜桃a∨噜噜一区二区三区| 欧美日韩国产在线观看网站| 中文字幕中文字幕在线中文字幕三区| 日韩乱码人妻无码中文字幕| 精品51国产黑色丝袜高跟鞋| 九九热在线视频免费观看| 日韩中文字幕区一区有砖一区| 精品国产亚洲AV| 欧美日韩国产一级片| 免费一级全黄少妇性色生活片| 夜夜嗨一区二区三区| 欧美一级高清片| 男女免费网站| 国产福利久久| 秋霞蜜臀av久久电影网免费| 狠狠狠综合7777久夜色撩人| 五十路亲子中出在线观看| 91福利在线视频| 91影视免费在线观看| **性色生活片久久毛片| 91在线精品秘密一区二区| 91免费视频大全| 97精品国产99久久久久久免费| 亚洲黄色一区二区三区| 精品久久久一区| 午夜精品美女久久久久av福利| 日本免费黄色网| 麻豆传媒在线看| 亚洲va男人天堂| 免费一级特黄3大片视频| www.激情五月| www日本在线观看| 91av一区二区三区| 欧美另类极品videosbest视频| 亚洲国产精品久久卡一| 欧美国产综合在线| 欧美精品一区二区三区蜜桃| 黄色小视频在线播放| 国产精品99一区二区三区| 中文字幕亚洲精品在线| 中文字幕精品—区二区日日骚| 一区二区三区激情视频| 六月婷婷激情综合| jizzjizzjizzjizzjizzjizzjizz| 蜜臀久久精品久久久用户群体| 亚洲熟妇一区二区| 午夜精品免费视频| 一级黄色在线观看| 69堂免费视频| 欧美成人观看免费全部完小说| 青青草免费在线| 成人国产一区二区| 亚洲综合在线免费观看| 石原莉奈一区二区三区高清在线| 97视频在线观看成人| 欧美一级大胆视频| 2018狠狠干| 色婷婷久久av| 欧美乱xxxxxxxxx| 国产日产久久高清欧美一区| 国产91精品最新在线播放| 欧美一级免费视频| 136国产福利精品导航网址| 日韩美女视频一区二区在线观看| 久久久91精品国产一区二区三区| 一区二区三区不卡在线观看| 青青草中文字幕| 色噜噜狠狠一区二区| 高清视频欧美一级| 91香蕉视频mp4| 国产精品综合色区在线观看| 秋霞在线观看av| 午夜在线视频免费观看| 欧美日本黄色| 国产精品久久国产精品| аⅴ资源新版在线天堂| 日产亚洲一区二区三区| 中文精品在线观看| 2019一级黄色毛片免费看网| 久久综合欧美| 欧美极品aⅴ影院| 国产精品免费av| 夜夜亚洲天天久久| 精品无人码麻豆乱码1区2区| 91网站最新网址| 欧美日本网站| 十大免费污污软件| 亚洲天堂2021av| 夜色资源网av在先锋网站观看| 欧美日韩亚洲一区二区三区在线观看| 国产精品精品软件男同| 一区二区三区自拍| 亚洲天堂网中文字| 精品一区二区日韩| 亚洲小说区图片区| 色在线观看视频| 日韩精品免费一区| 91麻豆精品久久毛片一级| 777午夜精品视频在线播放| 国产麻豆精品一区二区三区v视界| 国产特级黄色大片| 久久成人福利视频| 26uuu成人| 久久99精品久久久久久青青日本| 黄色免费在线看| 亚洲国产午夜| 亚洲精品v亚洲精品v日韩精品| 午夜免费激情视频| 蜜臀一区二区三区精品免费视频| 国产精品日产欧美久久久久| 青青草av专区| 日韩三级中文字幕| 久久久久亚洲av成人毛片韩| 91精品久久久久久久蜜月| 日韩美女视频一区二区| 亚洲色图国产精品| 日韩精品亚洲aⅴ在线影院| 日韩丝袜情趣美女图片| 黄网网址免费| 成人线上播放| 欧美日韩精品免费观看视欧美高清免费大片| 欧美一区二区三区……| 在线观看免费国产视频| av资源久久| 妞干网视频在线观看| 中文字幕在线观看1| wwwav网站| 一区二区三区欧美日| 欧美亚洲视频在线看网址| 国产成人精品一区二区三区网站观看| 99自拍视频在线| 在线观看国产欧美| 国产精品一品二品| 日本伦理一区二区三区| 一区二区三区免费在线观看视频| 999www成人| 国产免费一区二区三区最新6| 国产一区二区三区在线观看精品| 欧美精品激情blacked18| 日韩精品中文字幕在线不卡尤物| 中文字幕在线看视频国产欧美在线看完整| 成av人片一区二区| 免费在线视频一区二区| 亚洲福利视频专区| 中出中文字幕| 亚洲国产成人私人影院|