Java3种错误_3种常见的Class级别的错误

aa8f06cbf32b2d6bcedd627338c73110.png

ClassNotFoundException

很明显,这个错误是 找不到类异常,即在当前classpath路径下找不到这个类。

ClassNotFoundException继承了Exception,是必须捕获的异常,所以这个异常一般发生在显示加载类的时候,如下面两种方式显示来加载类并要捕获异常。

publicstaticvoidmain(String[]args){

try{

Class.forName("com.User");

}catch(ClassNotFoundExceptione){

e.printStackTrace();

}

try{

Test.class.getClassLoader().loadClass("com.User");

}catch(ClassNotFoundExceptione){

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类,一般发生在引用的类不存在,即类、方法或者属性引用了某个类或者接口,如果目标引用不存在就会抛出这个异常。

importorg.jdom2.input.DOMBuilder;

publicclassMyDomBuilderextendsDOMBuilder{

}

publicstaticvoidmain(String[]args){

MyDomBuilderbuilder=newMyDomBuilder();

}

MyDomBuilder继承了DOMBuilder,如果把DOMBuilder所属的jar包范围设置为provided,即运行时找不到DOMBuilder类就会报错。

Exceptioninthread"main"java.lang.NoClassDefFoundError:org/jdom2/input/DOMBuilder

at java.lang.ClassLoader.defineClass1(NativeMethod)

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(NativeMethod)

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)

Causedby: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)

...13more

先报出ClassNotFoundException,然后引发NoClassDefFoundError。

所以,以上两个错误都要确保加载类或者引用类都要在classpath路径下。

ClassCastException

类转换异常,这个错误一般发生在一个对象强制转换类型的时候,如将一个String强制转换成Integer就会报这个错。

这个异常继承了运行时异常RuntimeException,不需要捕获的异常。为了避免报这个错,在转换之间可以先用instanceof判断下是不是该类的引用再转换。如果是集合类型,最好指定集合里面的泛型。

publicstaticvoidmain(String[]args){

Objectstr="123";

Integeri=(Integer)str;

}

字符串"123"强制转换成Integer,然后报错。

Exceptioninthread"main"java.lang.ClassCastException:java.lang.Stringcannot be cast to java.lang.Integer

at com.test.user.Test.main(Test.java:9)

看完有没有收获?

分享到朋友圈给更多的人吧。

cd24e2c4cc75d0337effdcc968ff4b6b.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值