Java ClassNotFoundException – java.lang.ClassNotFoundException
时间:2020-02-23 14:36:26 来源:igfitidea点击:
Java ClassNotFoundException
当应用程序尝试加载类但Classloader无法在类路径中找到它时,将发生Java ClassNotFoundException。
造成java.lang.ClassNotFoundException的常见原因是使用Class.forName或者ClassLoader.loadClass通过传递类的String名称来加载类,而在类路径中找不到该类。
ClassNotFoundException是一个已检查的异常,因此必须将其捕获或者抛出给调用方。
ClassNotFoundException总是在运行时发生,因为我们使用Classloader间接加载类。
Java编译器无法知道运行时该类是否存在于类路径中。ClassNotFoundException最常见的例子之一是,当我们尝试使用Class.forName加载JDBC驱动程序时,却忘记将其jar文件添加到类路径中。
Java ClassNotFoundException示例
让我们看一个简单的示例,在该示例中将获得" ClassNotFoundException"。
package com.theitroad.exceptions; public class DataTest { public static void main(String[] args) { try { Class.forName("com.theitroad.MyInvisibleClass"); ClassLoader.getSystemClassLoader().loadClass("com.theitroad.MyInvisibleClass"); ClassLoader.getPlatformClassLoader().loadClass("com.theitroad.MyInvisibleClass"); } catch (ClassNotFoundException e) { e.printStackTrace(); } } }
请注意,com.theitroad.MyInvisibleClass
不存在,因此当我们执行上述程序时,将获得以下异常堆栈跟踪。
java.lang.ClassNotFoundException: com.theitroad.MyInvisibleClass at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:185) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:496) at java.base/java.lang.Class.forName0(Native Method) at java.base/java.lang.Class.forName(Class.java:292) at com.theitroad.exceptions.DataTest.main(DataTest.java:7)
在上面的示例中,所有这三个语句将抛出java.lang.ClassNotFoundException
。
如何解决ClassNotFoundException
修复ClassNotFoundException非常容易,因为异常堆栈跟踪明确指定了未找到的类。
只需检查类路径设置,并确保其在运行时存在即可。
ClassNotFoundException与NoClassDefFoundError
NoClassDefFoundError是在运行时找不到类时抛出的运行时错误。
与" ClassNotFoundException"非常相似。