常见的3种Class级别的错误

简介: ClassNotFoundException很明显,这个错误是找不到类异常,即在当前classpath路径下找不到这个类。ClassNotFoundException继承了Exception,是必须捕获的异常,所以这个异常一般发生在显示加载类的时候,如下面两种方式显示来加载类并要捕获异常。

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)
相关文章
|
Java Maven 容器
java依赖冲突解决问题之ClassNotFoundException定位确认异常如何解决
java依赖冲突解决问题之ClassNotFoundException定位确认异常如何解决
|
12月前
|
监控 安全 网络安全
网络安全新前线:零信任架构的实践与挑战
网络安全新前线:零信任架构的实践与挑战
230 0
|
12月前
鸿蒙原生开发手记:02-服务卡片开发
服务卡片是桌面小组件,分为静态和动态两类。本文介绍如何在 DevEco 中创建静态服务卡片,并实现点击事件传参和参数接收。创建时需选择支持的卡片大小,使用 FormLink 实现跳转,参数在 `entryability` 的生命周期方法中接收。注意:服务卡片不支持热重载。
478 0
鸿蒙原生开发手记:02-服务卡片开发
|
11月前
|
运维 jenkins Java
Jenkins 自动化局域网管控软件构建与部署流程
在企业局域网管理中,Jenkins 作为自动化工具,通过配置源码管理、构建及部署步骤,实现了高效、稳定的软件开发与部署流程,显著提升局域网管控软件的开发与运维效率。
209 5
|
12月前
|
安全 API 开发者
如何遵守孔夫子旧书网的使用规则?
使用孔夫子旧书网需先注册并认证,获得API权限后,须遵守API调用协议,包括正确使用公共参数及业务参数。平台强调版权保护、用户隐私权及免责声明,同时要求用户遵守法律法规,确保信息安全合规。遇技术问题可寻求官方支持。
|
12月前
|
云安全 安全 数据安全/隐私保护
带你读《阿里云安全白皮书》(十八)——云上安全重要支柱(12)
随着数智化发展,企业面临复杂的资产管理需求。阿里云提供全链路身份管控与精细化授权方案,涵盖细粒度权限管理和身份凭证保护,确保数据资产安全。支持多因素认证和最小权限原则,减少风险暴露,提升企业安全效率。详情见《阿里云安全白皮书(2024版)》。
|
API 人机交互 Android开发
安卓动画和过渡效果:增强视觉吸引力
【4月更文挑战第13天】本文探讨了如何在安卓应用中实现流畅的动画和过渡效果以提升用户体验。介绍了四种动画框架:View Animations、Property Animations、Drawable Animations和Transitions,以及MotionLayout(Android Jetpack)用于复杂动画。设计原则包括有意义、流畅、适当持续时间和用户控制。实现方法涉及基本View Animations、Property Animations、Transitions API以及使用MotionLayout。
388 7
|
文字识别 算法 Java
文字识别OCR常见问题之运行的时候报.ClassNotFoundException如何解决
文字识别OCR(Optical Character Recognition)技术能够将图片或者扫描件中的文字转换为电子文本。以下是阿里云OCR技术使用中的一些常见问题以及相应的解答。
292 0
|
Java 开发工具 Android开发
idea报错 ClassNotFoundException: org.apache.jsp.index_jsp
idea报错 ClassNotFoundException: org.apache.jsp.index_jsp
406 0
idea报错 ClassNotFoundException: org.apache.jsp.index_jsp
|
SQL 关系型数据库 MySQL
WorkBench操作云上数据库
本场景介绍利用WorkBench操作云上数据库并设计查询语句SQL。