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.Userat 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/DOMBuilderat 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.DOMBuilderat 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.Integerat com.test.user.Test.main(Test.java:9)總結
以上是生活随笔為你收集整理的3种常见的Class级别的错误的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓工控机可以干嘛(安卓工控)
- 下一篇: java程序员被误导的一个概念,Set也