3種常見的Class級別的錯誤
轉載自 3種常見的Class級別的錯誤
ClassNotFoundException
很明顯,這個錯誤是 找不到類異常
,即在當前classpath路徑下找不到這個類。
ClassNotFoundException繼承了Exception,是必須捕獲的異常,所以這個異常一般發生在顯示載入類的時候,如下面兩種方式顯示來載入類並要捕獲異常。
public static void main(String[] args) { try { Class.forName("com.User"); } catch (ClassNotFoundException e) { e.printStackTrace(); } try { Test.class.getClassLoader().loadClass("com.User"); } catch (ClassNotFoundException e) { e.printStackTrace(); } }
當無法找到對應的類時都會丟擲ClassNotFoundException異常。
java.lang.ClassNotFoundException: com.User at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) at com.test.user.Test.main(Test.java:15)
NoClassDefFoundError
這是虛擬機器隱式載入類出現的異常。
這個異常繼承了Error類,一般發生在引用的類不存在,即類、方法或者屬性引用了某個類或者介面,如果目標引用不存在就會丟擲這個異常。
import org.jdom2.input.DOMBuilder; public class MyDomBuilder extends DOMBuilder{ }
public static void main(String[] args) { MyDomBuilder builder = new MyDomBuilder(); }
MyDomBuilder繼承了DOMBuilder,如果把DOMBuilder所屬的jar包範圍設定為provided,即執行時找不到DOMBuilder類就會報錯。
Exception in thread "main" java.lang.NoClassDefFoundError: org/jdom2/input/DOMBuilder at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:763) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) at java.net.URLClassLoader.access$100(URLClassLoader.java:73) at java.net.URLClassLoader$1.run(URLClassLoader.java:368) at java.net.URLClassLoader$1.run(URLClassLoader.java:362) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:361) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) at com.test.user.Test.main(Test.java:8) Caused by: java.lang.ClassNotFoundException: org.jdom2.input.DOMBuilder at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 13 more
先報出ClassNotFoundException,然後引發NoClassDefFoundError。
所以,以上兩個錯誤都要確保載入類或者引用類都要在classpath路徑下。
ClassCastException
類轉換異常,這個錯誤一般發生在一個物件強制轉換型別的時候,如將一個String強制轉換成Integer就會報這個錯。
這個異常繼承了執行時異常RuntimeException,不需要捕獲的異常。為了避免報這個錯,在轉換之間可以先用instanceof判斷下是不是該類的引用再轉換。如果是集合型別,最好指定集合裡面的泛型。
public static void main(String[] args) { Object str = "123"; Integer i = (Integer)str; }
字串"123"強制轉換成Integer,然後報錯。
Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer at com.test.user.Test.main(Test.java:9)
相關文章
- 常見的 PostgreSQL 升級錯誤SQL
- 常見的錯誤日誌型別型別
- MySQL常見的8種SQL錯誤用法MySql
- 8種常見SQL錯誤用法SQL
- 常見的錯誤 SQL 用法SQL
- 【常見錯誤】--Nltk使用錯誤
- Go常見錯誤第15篇:interface使用的常見錯誤和最佳實踐Go
- 背事故?分享 6 種常見的 Go 致命錯誤場景Go
- SSH常見錯誤
- MySQL 常見錯誤MySql
- iOS-新手常見錯誤:this class is not key value coding-compliant for the key xxiOS
- mdxbuilder打包mdx時的常見錯誤UI
- 常見的授權錯誤及原因
- Git相關 | Git 常見的錯誤Git
- Go常見錯誤集錦 | 字串底層原理及常見錯誤Go字串
- Go 常見錯誤集錦 | 字串底層原理及常見錯誤Go字串
- npm install 常見錯誤NPM
- Mysql:1236常見錯誤MySql
- 【譯】10 種 JavaScript 最常見的錯誤JavaScript
- 使用Python時常見的9個錯誤Python
- Golang開發常見的57個錯誤Golang
- Code Review 常見的5個錯誤模式View模式
- 常見的錯誤SEO方法有哪些呢?
- Excel小技巧-公式和函式使用的常見八種錯誤合集Excel公式函式
- MySQL 效能最佳化:8 種常見 SQL 錯誤用法!MySql
- spring事務常見錯誤Spring
- opencv 編譯常見錯誤OpenCV編譯
- 使用 CocoaPods 時常見錯誤
- mysql8 常見錯誤MySql
- MySQL 安裝常見錯誤MySql
- MySQL 那些常見的錯誤設計規範MySql
- 5個常見的JavaScript記憶體錯誤JavaScript記憶體
- 常見DB2的錯誤的報告程式碼DB2
- 常見的三種沉浸式投影型別型別
- 常見的三種工廠模式區別模式
- Shell:常見錯誤總結(一)
- 搭建github部落格常見錯誤Github
- 變數命名以及常見錯誤變數