Java ClassNotFound例外
- Java ClassNotFoundException发生时,应用程序试图加载类,但ClassLoader(/community/tutorials/java-classloader)无法在类路径中找到它
- ClassNotFoundException的常见原因是使用
Class.lang.ClassNotFoundException
(/community/tutorials/exception-handling-in-java)来加载类,所以它必须通过传递类的字符串名来加载类 并且它不能在类路径上找到 - ClassNotFoundException是一个被检查的例外(/community/tutorials/exception-handling-in-java),所以它必须被捕获或扔到呼叫器(
Java ClassNotFound例外
让我们看看一个简单的例子,我们会得到ClassNotFoundException
。
1package com.journaldev.exceptions;
2
3public class DataTest {
4
5 public static void main(String[] args) {
6 try {
7 Class.forName("com.journaldev.MyInvisibleClass");
8
9 ClassLoader.getSystemClassLoader().loadClass("com.journaldev.MyInvisibleClass");
10
11 ClassLoader.getPlatformClassLoader().loadClass("com.journaldev.MyInvisibleClass");
12 } catch (ClassNotFoundException e) {
13 e.printStackTrace();
14 }
15 }
16
17}
请注意,com.journaldev.MyInvisibleClass
不存在,所以当我们执行上面的程序时,我们会得到以下的例外堆栈跟踪。
1java.lang.ClassNotFoundException: com.journaldev.MyInvisibleClass
2 at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)
3 at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:185)
4 at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:496)
5 at java.base/java.lang.Class.forName0(Native Method)
6 at java.base/java.lang.Class.forName(Class.java:292)
7 at com.journaldev.exceptions.DataTest.main(DataTest.java:7)
在上面的示例中,所有三个陈述都将投放java.lang.ClassNotFoundException
。
如何解决 ClassNotFoundException
修复 ClassNotFoundException 非常容易,因为例外堆栈跟踪清楚地指定了未找到的类,只需检查类路径设置并确保在运行时存在类。
对不起 对不起 对不起 对不起
NoClassDefFoundError
是当一个类别在运行时无法找到时丢失的运行时错误。 它与ClassNotFoundException
非常相似。 阅读更多在 Java NoClassDefFoundError。 参考: API Doc