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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

numberformatexception是什么异常_译文《最常见的10种Java异常问题》

發(fā)布時間:2025/3/15 java 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 numberformatexception是什么异常_译文《最常见的10种Java异常问题》 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

封面:洛小汐

譯者:潘潘

知彼知己,方能百戰(zhàn)不殆。

前言

本文總結了有關Java異常的十大常見問題。

目錄

  • 檢查型異常(checked) vs. 非檢查型異常(Unchecked)
  • 異常管理的最佳實踐箴言
  • 為什么在try代碼塊中聲明的變量不能在catch或者finally中被引用?
  • 為什么 Double.parseDouble(null) 和 Integer.parseInt(null) 拋出的異常不一樣呢?
  • Java中經常使用的運行時異常
  • 我們可以在同一個catch子句中捕獲多個異常嗎?
  • 在 Java 中構造方法能拋出異常嗎?
  • 在 final 代碼塊中拋出異常
  • try語句有return那么finally還會執(zhí)行嗎?
  • 為何有些開發(fā)人員對異常置之不理?
  • 檢查型異常(checked) vs. 非檢查型異常(Unchecked)

    簡單來說,對于檢查型異常, 一般在 編譯期 就會被檢查到,所以我們肯定會提前在方法內進行捕獲處理,或者在方法頭部申明并拋出。而非檢查型異常,往往無法提前預知,例如被除數是0、空指針等。檢查型異常特別重要,它會告訴那些調用你的接口的開發(fā)者們,如何提前預知并處理好這些可能發(fā)生的異常。

    例如,IOException就是常見的檢查型異常,而 RuntimeException(運行時異常)就是非檢查型異常。在閱讀剩余部分之前你或許可以研讀這份 Java異常的層次結構圖。

    異常管理的最佳實踐箴言

    如果可以正確處理異常,則應將其捕獲并處理,否則應將其拋出。

    為什么在try代碼塊中聲明的變量不能在catch或者finally中被引用?

    看下面這段代碼,在try代碼塊中聲明的 String s 就不能在catch中被引用, 這段代碼在編譯期是通不過的。

    try {File file = new File("path");FileInputStream fis = new FileInputStream(file);String s = "inside"; } catch (FileNotFoundException e) {e.printStackTrace();System.out.println(s); }

    原因是你不知道在try代碼塊中哪個位置會引發(fā)異常, 很有可能在聲明對象之前就引發(fā)了異常。對于這個特定的示例,是正確的。

    為什么 Double.parseDouble(null) 和 Integer.parseInt(null) 拋出的異常不一樣呢?

    它倆拋出的異常確實不同,但這是JDK的問題,當時開發(fā)這兩個接口的開發(fā)人員不是同一波,所以我們沒必要去糾結這個問題。

    Integer.parseInt(null); // throws java.lang.NumberFormatException: null Double.parseDouble(null); // throws java.lang.NullPointerException

    Java中經常使用的運行時異常

    這里列舉一部分:

    IllegalArgumentException ArrayIndexOutOfBoundsException

    在有些場景某個目標對象不滿足我們的預期,會用到這些異常,例如下面在 if 判斷語句中被使用:

    if (obj == null) {throw new IllegalArgumentException("obj can not be null");

    我們可以在同一個catch子句中捕獲多個異常嗎?

    答案是當然可以,不過如果在同一個catch子句中捕獲的這些異常都直接或間接繼承自同一父類,那么就只能在catch子句中捕獲父類了。

    // Java 7 之前需要這樣 catch (AException a) {logger.error(a);throw new MyException("a"); catch (BException b) {logger.error(b);throw new MyException("b"); }catch (CException c) {logger.error(c);throw new MyException("c"); }// 在Java 7中,可以捕獲所有這些異常 catch(AException | BException | CException ex){logger.error(ex);throw new MyException(ex); }補充說明 : 其實是這樣,在 Java7 就開始支持catch子句捕獲多個異常,多個異常使用 XOR符號(I)連接,異常的發(fā)生有可能是 A | B,但不能同時出現,相當于這些異常不能是間接或直接繼承自同一個父類,因為如果AB都繼承同一父類,那就不能 A|B 都寫上,這也是繼承原則。

    在 Java 中構造方法能拋出異常嗎?

    答案是當然可以,構造方法僅是一種特殊方法而已??梢詤⒖歼@個示例。

    在 final 代碼塊中拋出異常

    下面這個寫法是合法的:

    public static void main(String[] args) {File file1 = new File("path1");File file2 = new File("path2");try {FileInputStream fis = new FileInputStream(file1);} catch (FileNotFoundException e) {e.printStackTrace();} finally {try {FileInputStream fis = new FileInputStream(file2);} catch (FileNotFoundException e) {e.printStackTrace();}} }

    但是為了獲得更好的代碼可讀性,你應該將把 try-catch代碼塊封裝成一個新方法,然后將方法調用放在finally子句中:

    public static void main(String[] args) {File file1 = new File("path1");File file2 = new File("path2");try {FileInputStream fis = new FileInputStream(file1);} catch (FileNotFoundException e) {e.printStackTrace();} finally {// 封裝方法methodThrowException(); } }

    try語句有return那么finally還會執(zhí)行嗎?

    答案是肯定會執(zhí)行。

    Java官方文檔描述:The finally block always executes when the try block exits

    意思就是 ” 只要存在try代碼塊,finally代碼塊就一定會執(zhí)行 ” ,這種特性可以讓程序員避免在try語句中使用return, continue或者break關鍵字而忽略了關閉相關資源的操作等。

    為何有些開發(fā)人員對異常置之不理?

    很多時候會見到下面這種代碼寫法。允許的情況下盡可能捕獲異常并且進行處理,不知道為什么很多開發(fā)人員就是這么干?

    try {... } catch(Exception e) {e.printStackTrace(); }

    忽略異常是一件很容易做到的事,雖然這種寫法很常見,但不一定是正確的寫法。

    參考文獻:

  • Unchecked exceptions in Java
  • The root of Java exception class hierarchy
  • Java exceptions related questions in stackoverflow
  • 譯文完,由于個人理解能力和知識寬度有限,譯文中存在失誤之處,還請見諒,歡迎指正。

    總結

    以上是生活随笔為你收集整理的numberformatexception是什么异常_译文《最常见的10种Java异常问题》的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。