java - 如何解决 ClassNotFoundException?

标签 java class classpath classnotfoundexception

我正在尝试运行 Java 应用程序,但收到此错误:

java.lang.ClassNotFoundException:

冒号后面是缺少的类的位置。但是,我知道该位置不存在,因为该类位于其他地方。我怎样才能更新该类的路径?和类路径有关系吗?

最佳答案

类路径是从中加载类的位置列表。

这些“位置”可以是目录,也可以是 jar 文件。

对于目录,JVM 将遵循预期的模式来加载类。如果我的类路径中有目录C:/myproject/classes,并且我尝试加载类com.mycompany.Foo,它将在类目录下查找一个名为 com 的目录,然后在该目录下一个名为 mycompany 的目录,最后它将在该目录中查找名为 Foo.class 的文件。

在第二个实例中,对于 jar 文件,它将在 jar 文件中搜索该类。 jar 文件实际上只是像上面这样的目录的压缩集合。如果解压一个 jar 文件,您将得到一堆遵循上述模式的目录和类文件。

因此,当 JVM 尝试加载类定义时,它会从头到尾遍历类路径来查找类的定义。例如,在类路径中:

C:/myproject/classes;C:/myproject/lib/stuff.jar;C:/myproject/lib/otherstuff.jar

JVM 将首先尝试在目录 classes 中查找,然后在 stuff.jar 中查找,最后在 otherstuff.jar 中查找。

当您收到 ClassNotFoundException 时,这意味着 JVM 已遍历整个类路径,但未找到您尝试引用的类。正如 Java 世界中常见的那样,解决方案是检查您的类路径。

您可以通过在命令行上输入 java -cp 以及您的类路径来定义类路径。在 Eclipse 等 IDE 中,您将有一个菜单选项来指定您的类路径。

关于java - 如何解决 ClassNotFoundException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60508445/

相关文章:

c++ - 当派生类添加了数据成员时,派生类的构造函数应该如何在 C++ 中使用

java - 如何将外部文件夹添加到 Jetty 的类路径

java - 如何在没有管理访问权限的情况下将证书添加到 Cacerts 文件?

Java 流 - 在一次迭代中应用两个过滤器并收集到两个集合

java - 无法通过 selenium WebDriver 上的 "isDisplyed"检查 WebElement 是否存在

java - 记录异常和参数

java - 使用 JSON Simple 解析大型 JSON 文件(OutOfMemoryError)

javascript - 在 jquery 中为 div 类使用计数器的更短方法

Ruby:如何使类中只有一个方法公开?

intellij-idea - IntelliJ给出 fatal error :无法在类路径或引导类路径中找到包java.lang