Java 中的 ClassNotFoundException10 Sept 2024 | 5 分钟阅读 对于初学者来说,一个特别令人困惑的异常是 **Java 中的 ClassNotFoundException**。在本教程中,我们将熟悉 ClassNotFound 异常及其解决方法。 ClassNotFoundException顾名思义,当类找不到时,就会发生 ClassNotFoundException。当 Java 虚拟机 (JVM) 尝试加载特定类,但该类在指定的类路径中找不到时,就会抛出 ClassNotFoundException。换句话说,类路径已损坏。请注意,ClassNotFoundException 是一个已检查异常。
ClassNotFoundException 的解决方法在处理 ClassNotFoundException 时,可以考虑以下几点:
示例 - 1在此示例中,我们将看到 ClassNotFound 异常是如何抛出和解决的。在此示例中,我们将使用 findSystemClasas() 方法。 文件名: ClassException1.java 输出 Exception in thread "main" java.lang.ClassNotFoundException: com.google.common.collect.ImmutableList at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520) at java.base/java.lang.ClassLoader.findSystemClass(ClassLoader.java:1252) at SystemClass.loadSystemClass(ClassException1.java:6) at ClassException1.main(ClassException1.java:28) 说明: JVM 正在尝试加载 ImmutableList(在运行时),但它不存在。因此,抛出了 ClassNotFound 异常。请注意,当我们使用以下命令运行上述程序时,会抛出上述异常: 因此,我们需要将适当的 .jar 文件添加到类路径中。我们可以使用以下命令执行此操作。 我们得到以下输出: 示例 - 2在下面的示例中,我们使用了 Class 类的 forName() 方法。 文件名: ClassException2.java 输出 Exception in thread "main" java.lang.ClassNotFoundException: com.mysql.jdbc.Driver at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520) at java.base/java.lang.Class.forName0(Native Method) at java.base/java.lang.Class.forName(Class.java:375) at ClassException2.main(ClassException2.java:10) 说明: 问题相同。JVM 正在尝试加载 Driver 类但无法加载。因此,我们必须添加 JVM 可以找到 Driver.class 文件的路径。上述代码使用以下命令运行: 为了包含适当的 .jar 文件以成功运行程序,我们需要进行以下修改。 我们得到以下输出: 示例 - 3在下面的示例中,我们使用了 loadClass() 方法。 文件名: ClassException3.java 输出 Exception in thread "main" java.lang.ClassNotFoundException: com.google.common.collect.Constraint at java.base/java.lang.ClassLoader.findClass(ClassLoader.java:718) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:587) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520) at SystemClass.loadSystemClass(ClassException3.java:6) at ClassException3.main(ClassException3.java:28) 说明: 与上面的示例相同。如果我们将 jar 文件包含在类路径中,上面的代码将顺利运行。读者可以参考示例 1,自行完成。 类路径和 ClassNotFoundException类路径包含类被加载的位置列表。这些位置包括 jar 文件或目录。对于目录,Java 虚拟机在加载类时遵循一个模式。 例如,如果将目录“C:/javaProj/MyClasses”放在类路径中,并且在应用程序中尝试加载类 com.myproj.myprogram,则 JVM 会在 MyClasses 目录中搜索名为 com 的文件夹。在 com 中,它会查找名为 myproj 的目录,在 myproj 中,它会搜索名为 myprogram.class 的文件。 对于 jar 文件,Java 虚拟机将在 jar 文件中查找需要加载的类。与上面的示例类似,jar 文件是以压缩形式收集的各种目录。如果我们解压 jar 文件,我们会得到遵循上述模式的各种目录和各种类文件。 JVM 从头到尾读取类路径,并查找需要加载的类的类定义。例如,在以下类路径中: C:/javaProj/MyClasses; C:/javaProj/MyClasses/jkl.jar; C:/javaProj/MyClasses/xyz.jar JVM 首先在 MyClasses 目录中查找需要加载的适当类,然后在 jkl.jar 中,最后在 xyz.jar 文件中查找。 因此,如果抛出 ClassNotFoundException,则意味着所需文件既不在 .jar 文件中,也不在 MyClasses 目录中。 |
Java 中的 OffsetDateTime 类使用 format() 方法提供的格式化器来格式化此日期和时间。Java 中的 OffsetDateTime 类使用 format() 方法提供的格式化器来格式化此日期和时间。语法:public...
阅读 2 分钟
Getter 和 setter 方法在 Java 编程中经常使用。Java 中的 Getter 和 setter 方法广泛用于访问和操作类字段的值。通常,类字段使用私有访问说明符进行修饰。因此,要访问它们,需要公共访问说明符...
阅读 10 分钟
螺旋式遍历矩阵是指以圆形模式遍历元素,从左上角开始,沿着顶行向右移动。在每次行或列遍历之后,调整边界,并切换方向,持续进行,直到所有元素...
阅读 10 分钟
通过 Java 程序读取 PDF 文件与读取文本文件不同。读取 PDF 文件的方式略有不同。JDK 不提供读取 PDF 文件的任何类。为了读取 PDF 文件,我们依赖...
阅读 4 分钟
情侣派对问题是一个常被讨论的编程问题,其中程序员有一个由数组中的整数表示的人群。在这个人群中,每个人似乎都出现了两次,只有一个特殊的例外人士,他出现了...
阅读 6 分钟
有多种方法可以处理字符串。一项常见的任务是反转给定字符串中的短语。在本节中,我们将探讨如何在 Java 中实现这一点。首先,让我们定义“反转交换”的含义...
5 分钟阅读
在开发和维护 Java 应用程序时,有助于依赖关系分析和识别已弃用 API 的工具是无价的。Java 平台提供的两个这样的工具是 Jdeps 和 Jdeprscan。尽管它们的目的看似相似,但这些工具具有不同的功能和用例。...
阅读 3 分钟
理解 BWT(Burrows-Wheeler Transform) 为了改进数据压缩,一种称为 Burrows-Wheeler Transform (BWT) 的数据转换技术,它重新排列字母字符串。这种方法由 Michael Burrows 和 David Wheeler 创建,通常用于预处理数据,以便压缩方法可以更好地处理...
阅读 6 分钟
| Java 中 BigDecimal 转换为 String 在 Java 中,BigDecimal 是 java.math 包中的一个类,而该包属于 java.base 模块。它扩展了 Number 类并实现了 Comparable<BigDecimal> 接口。BigDecimal 类提供了算术、标度操作、舍入、比较等操作...
阅读 2 分钟
最长公共前缀(LCP)问题是指查找给定列表中所有字符串的公共前缀的最长字符串;这是一个经典的计算机科学问题,有许多应用,例如 DNA 序列分析、自动完成、数据压缩和...
5 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India