JavaRush /Java Blog /Random-TW /翻譯:困擾 Java 新手的 6 個 Java 異常。
profeg
等級 18

翻譯:困擾 Java 新手的 6 個 Java 異常。

在 Random-TW 群組發布

困擾 Java 初學者的 6 個 Java 異常。

(原文) (我對Java和英文都是新手,所以我很高興收到批評和幫助) 無論是以前還是現在,我都遇到過很多 Java 新手,他們對一些常見的異常有疑問,我必須再次解釋。我相信其他高階 Java 開發人員也有同樣的問題,試圖幫助新手處理這些異常。於是,為了自己的發展,寫了這篇文章。請隨意對本文發表評論或在下面的列表中添加例外情況。
1.NoClassDefFoundError _
這是大多數新 Java 開發人員在 Java 程式設計世界中遇到的異常之一,其中包含諸如 「執行緒「main」NoClassDefFoundError 中的異常」之類的訊息。初學者編寫一個程序,顯示“Hello world!”,進入命令行,輸入“java ...”,按 Enter 鍵,然後“砰!” =)。並弄清楚如何讓程式列印“Hello world!” 在監視器上,需要一些時間。 Java 虛擬機器 (JVM) 在啟動時嘗試存取某個類別但未找到該類別時,即使在編譯時找到了相同的類,也會發生 NoClassDefFoundError。大多數情況下,當嘗試使用“java”命令執行程式且類別路徑設定不正確時,會發生此異常。這裡描述一下出現這個異常的原因。
  • 該類別在 -classpath 中不可用。
  • CLASSPATH 環境變數已被覆寫。您可以使用 Windows 命令“set”檢查其存在性和正確性。
這裡更詳細地描述了該問題的解決方案
此外,您需要了解 CLASSPATH 環境變數和解釋器鍵 -classpath 之間的差異。專業人士不建議使用CLASSPATH。最好的方法是將 -classpath 鍵傳遞給解釋器。
2.類未找到異常
ClassNotFoundException 是另一個異常,對於剛開始程式設計的新手來說,它就是一場惡夢。有趣的是,普通 Java 開發人員經常 對 ClassNotFoundException 和 NoClassDefFoundError 異常感到困惑。因此,這兩個例外之間的區別仍然是 初級職位面試中最常見的問題之一。當JVM 嘗試載入特定類別但在類別路徑中找不到它 時,會發生 ClassNotFoundException 。新 Java 開發人員第一次遇到它的常見地方之一是使用 JDBC 庫連接到資料庫。在那裡,我們將嘗試使用 Class.forName("JDBCdriver") 之類的程式碼來載入驅動程式。 這裡有一篇關於 ClassNotFoundException 的好文章。試著理解 Java類別載入器的概念是處理這個問題最有效的方法。您可以閱讀 如何在 Win/Unix 環境中設定 Java 類別路徑正如java文件中所述,以下情況會發生異常:
  • 您嘗試使用 Class.forName 方法載入類,但 .class 檔案不在類別路徑中。這是這裡列出的三種情況中最常見的情況。
  • 當類別載入器嘗試使用 loadClass 載入類別時。
  • 當類別載入器嘗試使用 findSystemClass 載入類別。
3.空指針異常
對於初學者來說,這個異常比前兩者更容易理解。此外, 這個異常很容易識別,因為 當發生異常時,有關異常的訊息 會指示發生異常的程式中的行號。當 JVM 嘗試存取物件或嘗試呼叫物件的方法並收到 null 而不是對該物件的參考時,會發生此異常。Java Doc 也指出了以下原因:
  • 存取或更改無效物件的方法。(即,它不是對 JVM 物件的引用,而是 null)
  • 當數組無效時取得數組的長度。(例如未初始化)
  • 嘗試存取不存在的物件類型陣列元素。(即,當陣列元素包含 null 而不是物件參考時)
避免此異常的最簡單方法是使用非 NULL 檢查。然而,遲早這會成為 Java 開發實踐,你會發現到處都是非 NULL 檢查。有趣的是,到處 插入非 NULL 檢查並不被認為是好的程式設計風格。使用非 NULL 檢查的主要原因是開發人員希望在失敗或錯誤時傳遞 null 物件。相反,程式設計師應該使用 返回空物件而不是 null 值作為程式在發生錯誤時的行為的基本邏輯,這是 一種良好的程式設計實踐。然而,採用這種程式設計實踐比看起來更困難。
我們的資源中有一篇關於此的好文章
4.類別轉換異常
這是初學者熟悉的另一個異常,當嘗試將物件轉換為不是其子類別的類別時會發生這種情況。同樣,這很容易理解、識別並且修復起來也很簡單。當執行時期物件的類型未知時,避免此異常的一種方法是使用 「InstanceOf」來檢查該物件是否是特定類別的實例。
5. ArrayIndexOutOfBoundsException 異常
此異常是不言自明的,當 JVM 嘗試存取具有不存在索引(例如負數 (-1) 或大於或等於陣列大小)的陣列元素時,就會發生此異常。 它很容易理解、定義和糾正。例如,建立循環時 for (i = 0; i <= cmd_stack.length; i++) System.out.println(cmd_stack[i]); 會出現異常,因為數組中索引從0開始,而length方法傳回元素的數量,並且該數量比最後一個索引的值大1。正確使用 for (i = 0; i < cmd_stack.length; i++) System.out.println(cmd_stack[i]);
6.非法參數異常
這種異常較不常見,而且相當容易理解、辨識和解決。當 JVM 嘗試呼叫不存在的方法或帶有無效參數的方法時,就會發生這種情況。
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION