亚洲综合图片区自拍_思思91精品国产综合在线观看_一区二区三区欧美_欧美黑人又粗又大_亚洲人成精品久久久久桥本

10 個問題搞定 Java 異常處理,值得收藏!

2023-01-30 10:24:50 來源:51CTO博客

本文總結(jié)了關(guān)于Java異常的十大常見問題。

1. 有檢查的與無檢查的


(資料圖)

簡而言之,檢查型異常必須在方法中明確捕獲,或者在方法的throws子句中聲明。未檢查的異常是由無法解決的問題引起的,例如除以零、空指針等。被檢查的異常特別重要,因?yàn)槟阆M褂媚愕腁PI的其他開發(fā)者知道如何處理這些異常。

例如,IOException是一個常用的檢查異常,RuntimeException是一個未檢查的異常。在閱讀其他內(nèi)容之前,你可以先看看《Java 異常層次圖》。

Java 異常層次圖

2. 異常管理的最佳實(shí)踐

如果一個異??梢员徽_處理,那么它就應(yīng)該被捕獲,否則,它就應(yīng)該被拋出。

3. 為什么在try中定義的變量不能在catch或final中使用?

在下面的代碼中,在try塊中聲明的字符串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);}

原因是你不知道在嘗試塊的什么地方會拋出異常。很有可能在對象被聲明之前就拋出了異常。在這個特定的例子中,情況就是如此。

4. 為什么Double.parseDouble(null)和Integer.parseInt(null)會產(chǎn)生不同的異常?

它們實(shí)際上拋出了不同的異常。這是JDK的一個問題。它們是由不同的開發(fā)者開發(fā)的,所以不值得過多的思考。

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

5. Java中常用的運(yùn)行時(shí)異常

下面是其中的一些。

非法參數(shù)異常(IllegalArgumentException

ArrayIndexOutOfBoundsException

當(dāng)條件不滿足時(shí),它們可以在if語句中使用,如下所示:

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

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

答案是肯定的。只要這些異常類可以追溯到類繼承層次中的同一個超類,你就可以只使用那個超類。

7. 在java中構(gòu)造函數(shù)可以拋出異常嗎?

答案是肯定的。構(gòu)造器是一種特殊的方法。下面是一個代碼例子。

8. 在最終子句中拋出異常

以下做法是合法的:

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();    }  }}

但為了提高代碼的可讀性,你應(yīng)該把嵌入的try-catch塊包裝成一個新的方法,然后把方法的調(diào)用放在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();  }}

9. return可以在finally塊中使用嗎?

是的,可以。

10. 為什么開發(fā)人員要默默地消耗異常?

有很多像下面這樣的代碼段發(fā)生。如何處理異常是如此重要,為什么開發(fā)人員一直這樣做?

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

忽視只是簡單的。頻繁出現(xiàn)并不意味著正確性。

標(biāo)簽: 拋出異常 如何處理 開發(fā)人員

上一篇:
下一篇: