栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

ClassNotFoundException与NoClassDefFoundError

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

ClassNotFoundException与NoClassDefFoundError

NoClassDefFoundError

如果Java虚拟机或ClassLoader实例尝试加载类的定义(作为常规方法调用的一部分或使用新表达式创建新实例的一部分)而抛出,则找不到该类的定义。

当前正在编译的类在编译时就存在搜索到的类定义,但是无法再找到该定义。


ClassNotFoundException

当应用程序尝试使用以下方式通过其字符串名称加载类时,抛出该错误:类Class中的forName方法。类ClassLoader中的findSystemClass方法。类ClassLoader中的loadClass方法。


您必须了解,找不到被删除

JVM
的定义
class
,因为
class
找不到自动抛出的本身
ClassNotFoundException

发生此异常,

runtime
因此无论是否先编译都没有关系,您删除了文件,因此找不到它并抛出
exception

请注意,这

NoClassDefFoundError
实际上不是例外,它是
Error
从派生
linkageError
ClassNotFoundException
直接从派生的
java.lang.Exception

要恢复,

NoClassDefFoundError
全局仅表示根据代码应存在但实际上不存在(或不在类路径中)的
JVM
尝试访问。
runtime``compiled


重现ClassNotFoundException的示例

public class ClassNotFoundExceptionExample {    private static final String CLASS_TO_LOAD = "main.java.Utils";    public static void main(String[] args) {        try { Class loadedClass = Class.forName(CLASS_TO_LOAD); System.out.println("Class " + loadedClass + " found successfully!");        }        catch (ClassNotFoundException ex) { System.err.println("A ClassNotFoundException was caught: " + ex.getMessage()); ex.printStackTrace();        }    }}

重现NoClassDefFoundError的示例

创建一个简单的类

Test

public class Test {        public Test() {     System.out.println("A new instance of the Test class was created!");        }}

和一堂课

NoClassDefFoundErrorExample

public class NoClassDefFoundErrorExample {        private static Test test = new Test();        public static void main(String[] args) {     System.out.println("The definition of Test was found!");        }}

现在创建

.jar
执行该
main
方法的可执行文件。您可以
Manifest.txt
.jar

Main-Class: NoClassDefFoundErrorExample

现在运行以下命令

javac Test.javajavac NoClassDefFoundErrorExample.javajar cfm NoClassDefFoundErrorExample.jar Manifest.txt NoClassDefFoundErrorExample.classjava -jar NoClassDefFoundErrorExample.jar

注意

NoClassDefFoundError

Exception in thread "main" java.lang.NoClassDefFoundError: TestClass    at NoClassDefFoundErrorExample.(NoClassDefFoundErrorExample.java:2)Caused by: java.lang.ClassNotFoundException: TestClass    at java.net.URLClassLoader$1.run(URLClassLoader.java:372)    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)    at java.security.AccessController.doPrivileged(Native Method)    at java.net.URLClassLoader.findClass(URLClassLoader.java:360)    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)    ... 1 more


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/508091.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号