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"非常相似。