日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

java try catch_Java捕获异常

發(fā)布時間:2023/12/1 java 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java try catch_Java捕获异常 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

大家好,歡迎來到樂字節(jié)小樂的Java技術(shù)分享園地

在Java中,凡是可能拋出異常的語句,都可以用try ... catch捕獲。把可能發(fā)生異常的語句放在try { ... }中,然后使用catch捕獲對應(yīng)的Exception及其子類。

多catch語句

可以使用多個catch語句,每個catch分別捕獲對應(yīng)的Exception及其子類。JVM在捕獲到異常后,會從上到下匹配catch語句,匹配到某個catch后,執(zhí)行catch代碼塊,然后不再繼續(xù)匹配。

簡單地說就是:多個catch語句只有一個能被執(zhí)行。例如:

public static void main(String[] args) {try {process1();process2();process3();} catch (IOException e) {System.out.println(e);} catch (NumberFormatException e) {System.out.println(e);} }

存在多個catch的時候,catch的順序非常重要:子類必須寫在前面。例如:

public static void main(String[] args) {try {process1();process2();process3();} catch (IOException e) {System.out.println("IO error");} catch (UnsupportedEncodingException e) { // 永遠(yuǎn)捕獲不到System.out.println("Bad encoding");} }

對于上面的代碼,UnsupportedEncodingException異常是永遠(yuǎn)捕獲不到的,因?yàn)樗荌OException的子類。當(dāng)拋出UnsupportedEncodingException異常時,會被catch (IOException e) { ... }捕獲并執(zhí)行。

因此,正確的寫法是把子類放到前面:

public static void main(String[] args) {try {process1();process2();process3();} catch (UnsupportedEncodingException e) {System.out.println("Bad encoding");} catch (IOException e) {System.out.println("IO error");} }

finally語句

無論是否有異常發(fā)生,如果我們都希望執(zhí)行一些語句,例如清理工作,怎么寫?

可以把執(zhí)行語句寫若干遍:正常執(zhí)行的放到try中,每個catch再寫一遍。例如:

public static void main(String[] args) {try {process1();process2();process3();System.out.println("END");} catch (UnsupportedEncodingException e) {System.out.println("Bad encoding");System.out.println("END");} catch (IOException e) {System.out.println("IO error");System.out.println("END");} }

上述代碼無論是否發(fā)生異常,都會執(zhí)行System.out.println("END");這條語句。

那么如何消除這些重復(fù)的代碼?Java的try ... catch機(jī)制還提供了finally語句,finally語句塊保證有無錯誤都會執(zhí)行。上述代碼可以改寫如下:

public static void main(String[] args) {try {process1();process2();process3();} catch (UnsupportedEncodingException e) {System.out.println("Bad encoding");} catch (IOException e) {System.out.println("IO error");} finally {System.out.println("END");} }

注意finally有幾個特點(diǎn):

  • finally語句不是必須的,可寫可不寫;
  • finally總是最后執(zhí)行。
  • 如果沒有發(fā)生異常,就正常執(zhí)行try { ... }語句塊,然后執(zhí)行finally。如果發(fā)生了異常,就中斷執(zhí)行try { ... }語句塊,然后跳轉(zhuǎn)執(zhí)行匹配的catch語句塊,最后執(zhí)行finally。

    可見,finally是用來保證一些代碼必須執(zhí)行的。

    某些情況下,可以沒有catch,只使用try ... finally結(jié)構(gòu)。例如:

    void process(String file) throws IOException {try {...} finally {System.out.println("END");} }

    因?yàn)榉椒暶髁丝赡軖伋龅漠惓?#xff0c;所以可以不寫catch。

    捕獲多種異常

    如果某些異常的處理邏輯相同,但是異常本身不存在繼承關(guān)系,那么就得編寫多條catch子句:

    public static void main(String[] args) {try {process1();process2();process3();} catch (IOException e) {System.out.println("Bad input");} catch (NumberFormatException e) {System.out.println("Bad input");} catch (Exception e) {System.out.println("Unknown error");} }

    因?yàn)樘幚鞩OException和NumberFormatException的代碼是相同的,所以我們可以把它兩用|合并到一起:

    public static void main(String[] args) {try {process1();process2();process3();} catch (IOException | NumberFormatException e) { // IOException或NumberFormatExceptionSystem.out.println("Bad input");} catch (Exception e) {System.out.println("Unknown error");} }

    練習(xí)

    用try ... catch捕獲異常并處理。

    下載練習(xí):捕獲異常練習(xí) (推薦使用IDE練習(xí)插件快速下載)

    小結(jié)

    使用try ... catch ... finally時:

    • 多個catch語句的匹配順序非常重要,子類必須放在前面;
    • finally語句保證了有無異常都會執(zhí)行,它是可選的;
    • 一個catch語句也可以匹配多個非繼承關(guān)系的異常。
    • 關(guān)注樂字節(jié),這里有更多更好的Java干貨知識

    總結(jié)

    以上是生活随笔為你收集整理的java try catch_Java捕获异常的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。