为什么在Java中,当类存在时我们会得到ClassNotFoundException的异常?
每当我们尝试加载一个类时,如果类加载器无法在指定路径找到该类,则会生成 ClassNotFoundException。
这可能在执行时发生java 程序,使用名为 Class 的类的 forName() 方法或 ClassLoader 类的 loadClass() 方法显式加载类。这两个类接受表示类名的字符串值并加载指定的类。
将类名传递给这些方法时,您需要确保 -
指定的类(连同包)应该位于当前目录或其path 应在环境变量 classpath 中列出。
传递给这些方法的类名应该准确。
示例
假设我们创建了一个名为 Sample 在目录 D:// 中并按如下所示进行编译 -
package myPackage.example; public class Sample { static { System.out.println("The class named Sample loaded successfully........."); } }
编译
D:\>javac -d . Sample.java
这将在当前目录 myPackage.example 中创建一个包,并在其中生成 Sample 类的 .class 文件。因此,在加载此类时,您需要将其放在同一目录中,并将绝对类名传递给 Class.forName() 或 loadClass() p>
示例
实时演示
public class ClassNotFoundExample { public static void main(String args[]) { try { Class.forName("myPackage.exampl.Sample"); }catch (ClassNotFoundException ex) { ex.printStackTrace(); } } }
异常
在执行上述程序时,由于包的名称拼写错误,您将得到以下异常。
D:\>java ClassNotFoundExample java.lang.ClassNotFoundException: myPackage.exampl.Sample at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source) at java.base/java.lang.ClassLoader.loadClass(Unknown Source) at java.base/java.lang.Class.forName0(Native Method) at java.base/java.lang.Class.forName(Unknown Source) at ClassNotFoundExample.main(ClassNotFoundExample.java:4)
如果您尝试从另一个目录访问特定类,则需要设置类路径 -
包含以下内容的文件夹(最外层包) .class 文件。
或者,
包含该类的 jar 文件。
假设我们已经纠正了拼写问题,并尝试从 E:// 目录中的 Java 文件加载该类
示例
实时演示
public class ClassNotFoundExample { public static void main(String args[]) { try { Class.forName("myPackage.example.Sample"); }catch (ClassNotFoundException ex) { ex.printStackTrace(); } } }
异常
仍然会遇到相同的异常,因为包含指定类的 .class 文件(或包含它的 jar 文件)的包既不在当前目录中,也不在路径列表中环境变量类路径。
E:\>java ClassNotFoundExample java.lang.ClassNotFoundException: myPackage.example.Sample at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source) at java.base/java.lang.ClassLoader.loadClass(Unknown Source) at java.base/java.lang.Class.forName0(Native Method) at java.base/java.lang.Class.forName(Unknown Source) at ClassNotFoundExample.main(ClassNotFoundExample.java:4)
在当前场景中,将类路径设置为包含所需类的包的目录,即“D://”并执行上述java程序,使其工作。
E:\>javac ClassNotFoundExample.java E:\>java ClassNotFoundExample The class named Sample loaded successfully.........
以上是为什么在Java中,当类存在时我们会得到ClassNotFoundException的异常?的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

Java的类上载涉及使用带有引导,扩展程序和应用程序类负载器的分层系统加载,链接和初始化类。父代授权模型确保首先加载核心类别,从而影响自定义类LOA

本文讨论了使用咖啡因和Guava缓存在Java中实施多层缓存以提高应用程序性能。它涵盖设置,集成和绩效优势,以及配置和驱逐政策管理最佳PRA

本文讨论了使用JPA进行对象相关映射,并具有高级功能,例如缓存和懒惰加载。它涵盖了设置,实体映射和优化性能的最佳实践,同时突出潜在的陷阱。[159个字符]

本文讨论了使用Maven和Gradle进行Java项目管理,构建自动化和依赖性解决方案,以比较其方法和优化策略。

本文使用Maven和Gradle之类的工具讨论了具有适当的版本控制和依赖关系管理的自定义Java库(JAR文件)的创建和使用。
