ClassNotFoundException与NoClassDefFoundError的区别

简介: ClassNotFoundException与NoClassDefFoundError的区别

ClassNotFoundException与NoClassDefFoundError的区别是java面试的常见题目之一,这种题目怎么可以答错呢?

Java开发中常见两种查找不到Class的异常,分别是
java.lang.ClassNotFoundException和java.lang.NoClassDefFoundError,二者主要区别是显式装载的时候找不到类还是隐式装载的时候找不到类。 在Java中,类需要被类加载器加到到JVM内存中才能被使用,类的装载有两种方式

一、显式装载

程序中使用指定的方法加载指定的类,目前有以下三种情况

  • Class.forName()
  • ClassLoader的loadClass方法
  • ClassLoader的findSystemClass()方法(protected final,只能在本类或者继承的子类才可以使用)

当调用以上任何一个方法的时候,指定的类由类装入器装入。如果类已经装入,那么只是返回一个引用;否则,装入器会通过委托模型装入类。

二、隐式装载

隐式  类装入发生在由于引用、实例化(new)或继承导致装入类的时候(不是通过显式方法调用)。在每种情况下,装入都是在幕后启动的,JVM  会解析必要的引用并装入类。与显式类装入一样,如果类已经装入了,那么只是返回一个引用;否则,装入器会通过委托模型装入类。  类的装入通常组合了显式和隐式类装入。例如,类装入器可能先显式地装入一个类,然后再隐式地装入它引用的所有类。

ClassNotFoundException发生在显式装载类的时候查找不到对应的类文件的时候;

NoClassDefFoundError发生在隐式装载类的时候查找不到对应的类文件的时候,此时执行的类已经编译但是在执行的时候找不到定义的类文件,存在searched-for类定义,也就是说引用的类在类路径中没有找到。例如存在一个Maven多模块工程,在其中一个war   Maven模块中通过new或者引用隐式引入了某个类,此时编译总是成功的,然而有另外一个Maven模块是用来将工程打包成ear包部署到WAS中的,此时此模块打包的时候漏掉了在war  Maven模块中引用的类所在的包,此时打包成功,但是执行的时候就会出现 NoClassDefFoundError。

相关文章
|
8月前
|
机器学习/深度学习 监控 算法
基于YOLO26的电梯内电瓶车检测识别(中英文双版) | 附完整源码与效果演示
本文提出了一种基于YOLO26深度学习算法的电梯内电瓶车检测识别系统。该系统通过部署在电梯内的摄像头实时采集视频流,利用训练好的YOLO26模型对画面中的目标进行检测,准确识别出自行车和电动摩托车两类目标,从而实现对违规行为的智能预警和拦截。
|
XML 人工智能 API
电商API是什么?常用的电商API有哪些?发挥着怎样的作用?
电商API是连接电商平台与支付、物流、数据分析等服务的技术桥梁,基于RESTful或GraphQL架构,实现系统间高效通信。它助力开发者快速集成功能,提升运营效率,推动业务自动化与智能化发展。
|
11月前
|
数据采集 安全 API
高精度IP定位:准确性提升与数据优化全攻略
使用IP数据云、IPinfo、IPnews这类专业的IP数据服务平台检测,不仅可以查询IP,更是一个网络风险识别仪器。对于跨境电商、安全研究人员,或者想提高上网隐私的人来说,都挺值得收藏学习。
高精度IP定位:准确性提升与数据优化全攻略
|
安全 物联网 5G
物联网卡
随着科技飞速发展,物联网作为新一代信息技术的核心部分,正深刻改变生活、工作和社会结构。物联网卡是设备接入互联网的关键媒介,推动了智慧城市、工业4.0、智能家居、远程医疗、智能交通等领域的创新。它具备定制化服务、广覆盖与稳定性、大容量与高并发及安全管理等特点。物联网卡广泛应用于智能安防、智能制造、智能家居、远程医疗和智能交通等领域,提升效率和体验。尽管面临网络覆盖不足、数据安全等挑战,但通过加强基础设施建设、强化数据安全、推动标准化和创新服务模式,物联网卡将引领万物互联新时代,成为连接未来的桥梁。
物联网卡
|
消息中间件 运维 Java
RocketMQ的常规运维实践应用
RocketMQ的常规运维实践应用
|
机器学习/深度学习 人工智能 自然语言处理
通义灵码:新体验与最佳实践
随着AI技术的发展,阿里巴巴推出的通义灵码作为先进的大模型,提升了自然语言处理能力,并在智能对话、多语言支持及自定义训练等方面带来全新体验。文章介绍了通义灵码在客服系统、智能写作及教育领域的应用案例,展示了其提升效率和创造价值的能力。
789 1
|
人工智能 自然语言处理 JavaScript
微软 Copilot官网是什么?Copilot官方网站国内如何使用!
微软Copilot,这款由 GitHub 和 OpenAI 联手打造的 AI 结对编程工具,正如同一位经验丰富的编程大师,在你编写代码的旅程中为你指点迷津,提供源源不断的灵感和帮助。它基于 OpenAI 强大的 Codex 模型,汲取了数十亿行公开代码的精华,能够理解各种编程语言和框架的奥妙,宛如一位博学的智者,随时准备为你解答编程难题。
|
存储 C语言
【C语言篇】scanf和printf万字超详细介绍(基本加拓展用法)(上篇)
printf 的作⽤是将参数⽂本输出到屏幕。它名字⾥⾯的 f 代表 format (格式化),表⽰可以定制输出⽂本的格式。
654 1
|
算法 Serverless 计算机视觉
Fast Fourier Transform,简称 FFT
快速傅里叶变换(Fast Fourier Transform,简称 FFT)是一种高效计算离散傅里叶变换(DFT)的算法。它可以将一个有限长度的离散信号序列转换为一系列不同频率的正弦和余弦波,从而使我们能够更容易地分析和处理信号。与传统的 DFT 算法相比,FFT 算法具有更高的计算效率,因为它利用了对称性和周期性的性质,将计算复杂度从 O(N^2) 降低到 O(NlogN)。
937 5

热门文章

最新文章