How to Set CLASSPATH in Java

2025年1月7日 | 5 分钟阅读

CLASSPATH: CLASSPATH 是一个环境变量,应用程序类加载器使用它来查找和加载 .class 文件。CLASSPATH 定义了用于查找不是扩展或 Java 平台一部分的第三方和用户自定义类的路径。在设置 CLASSPATH 时,请包含所有包含 .class 文件和 JAR 文件的目录。

当您需要设置 CLASSPATH 时

  • 您需要加载一个不在当前目录或任何子目录中的类。
  • 您需要加载一个不在扩展机制指定位置的类。

CLASSPATH 取决于您要设置的 CLASSPATH。CLASSPATH 的末尾是目录名或文件名。以下几点描述了 CLASSPATH 的结尾应该是什么。

  • 如果是 JAR 或 zip 文件,其中包含类文件,则 CLASSPATH 的结尾是 zip 或 JAR 文件的名称。
  • 如果类文件放置在无名包中,则 CLASSPATH 的结尾是包含类文件的目录。
  • 如果类文件放置在命名包中,则 CLASSPATH 的结尾是包含根包的目录,该目录在完整包名中,即完整包名中的第一个包。

CLASSPATH 的默认值是一个点(.)。这意味着只搜索当前目录。当您设置 CLASSPATH 变量或使用 -classpath 命令(简写 -cp)时,默认的 CLASSPATH 值将被覆盖。如果您想在搜索路径中包含当前目录,请在新设置中放入一个点(.)。

如果 CLASSPATH 找到一个存在于当前目录中的类文件,它将加载并使用该类,而不管 CLASSPATH 中包含的另一个目录中是否存在同名类。

如果您想设置多个类路径,则需要使用分号(;)分隔每个 CLASSPATH。

使用 JVM 的第三方应用程序(MySQL 和 Oracle)可以修改 CLASSPATH 环境变量以包含它们使用的库。类可以存储在目录或存档文件中。Java 平台的类存储在 rt.jar 中。

设置 CLASSPATH 有两种方法:通过命令提示符或通过设置环境变量。

让我们看看如何设置 MySQL 数据库的 CLASSPATH

步骤 1:单击 Windows 按钮并选择“控制面板”。选择“系统”。

How to Set CLASSPATH in Java

步骤 2:单击“高级系统设置”。

How to Set CLASSPATH in Java

步骤 3:将打开一个对话框。单击“环境变量”。

How to Set CLASSPATH in Java

步骤 4:如果 CLASSPATH 已存在于“系统变量”中,请单击“编辑”按钮,然后在末尾添加分号(;)。粘贴 MySQL-Connector Java.jar 文件的路径。

如果 CLASSPATH 不存在于“系统变量”中,请单击“新建”按钮,将变量名输入为 CLASSPATH,将变量值输入为C:\Program Files\Java\jre1.8\MySQL-Connector Java.jar;.;

请记住:在 CLASSPATH 的末尾添加 ;.;。

How to Set CLASSPATH in Java

PATH 和 CLASSPATH 的区别

PATHCLASSPATH
PATH 是一个环境变量。CLASSPATH 也是一个环境变量。
操作系统使用它来查找可执行文件(.exe)。应用程序类加载器使用它来定位 .class 文件。
您需要包含包含 .exe 文件的目录。您需要包含所有包含 .class 和 JAR 文件的目录。
设置 PATH 环境变量后,无法覆盖。CLASSPATH 环境变量可以通过使用命令行选项 -cp 或 -CLASSPATH 来覆盖 javac 和 java 命令。

如何在 Windows 命令提示符下设置 CLASSPATH

在命令提示符下键入以下命令并按 Enter 键。

在上面的命令中,set 是一个内部 DOS 命令,允许用户更改变量值。CLASSPATH 是变量名。用百分号 (%) 括起来的变量是一个现有的环境变量。分号是一个分隔符,在 (;) 之后是 rt.jar 文件的 PATH。

Java 中的 ext 文件夹如何工作

ext 目录的工作方式与 CLASSPATH 类似。ext 目录是类加载机制的一部分。ext 目录中 JAR 包中的类可供 Java 应用程序使用。

下表展示了 CLASSPATH 和扩展机制之间的主要区别

特性CLASSPATH扩展机制
类加载顺序CLASSPATH 在引导程序和扩展加载之后加载。ext 在引导程序加载之后,但在 CLASSPATH 加载之前加载。
范围它是应用程序特定的。主机上的所有 JRE 都是 CLASSPATH 环境变量。运行在特定 JRE java.ext.dirs 中的所有 JVM。
包名java.class.path 用于查找包含类文件的目录和 JAR 存档。java.ext.dirs 用于指定扩展机制加载类的位置。
规范它通过名称指定,包括 extension.jar 和包含 .class 文件的目录。指定目录中的所有 JAR 文件都将被加载。

该机制将拾取扩展目录中的所有 .jar 文件,即使该文件没有 .jar 扩展名。而通配符(*)无法拾取它。这种技术在扩展目录中不起作用。

让我们通过一个例子来理解执行过程。

A.java

B.java

编译 A.java 文件。我们将编译后的 A.class 文件归档到 A.jar。将此 JAR 文件放置在与编译后的 B.class 文件不同的目录中。

为了演示类路径的使用,我们将 A.jar 文件放在 C:\JavaPrograms 目录中,并通过通配符 (*) 访问该 JAR 以供 B 使用。

我们发现 B 仍然可以加载 A.class,尽管我们已从当前目录中将其删除。Java 启动器明确查找了 C:\JavaProgram。在没有出现在同一目录和显式类路径指定的情况下加载类也是可能的。

这通常被认为是使用扩展机制的好处,因为使用该 JRE 的所有应用程序都可以看到相同的类,而无需在类路径上显式指定它们。

如果我们把 A.jar 的名称改为同一 CLASSPATH 引用目录中的 A.backup,会发生什么?当这样做时,会遇到 NoClassDefFoundError,因为 CLASSPATH 引用没有 .jar 扩展名。