环境变量PATH和CLASSPATH是什么? Window系统如何配置?

一、PATH

环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统文件夹位置等。环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息。

例如Windows和DOS操作系统中的path环境变量,当要求系统运行命令而没有告诉它这个命令所在的完整路径时,系统会在两个路径中寻找此程序:

当前目录;

path中指定的路径。

若以上两个路径均不存在该命令,系统就会提示该命令不存在。用户通过设置环境变量,来更好的运行进程。


例如把PATH中C:\Windows\System32环境变量删了,则运行ipconfig就会报错:***'ipconfig' 不是内部或外部命令,也不是可运行的程序或批处理文件。


在Java开发中常用到PATH环境变量,安装完JDK(Java Development Kit,Java开发套件)之后,可以在安装目录下找到两个子目录(bin目录和lib目录)。bin目录中包含着Java编译器等可执行文件。


在PATH路径中配置上JAVA bin目录,就可以在任何路径下运行Java命令了。

二、CLASSPATH是什么

CLASSPATH是一个环境变量,是Java运行时环境搜索类和其他资源文件(比如jar\zip等资源)的路径。

在以下情况下,您需要设置CLASSPATH:

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

CLASSPATH路径是以目录名称或者文件名称结尾。包含以下这几种情况:

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

CLASSPATH的默认值为点(.)。这意味着在当前目录查找类文件。

如果CLASSPATH找到当前目录中存在的类文件,则它将加载该类并使用它,即使另一个目录中也存在同名的类也不被影响。

三、PATH和CLASSPATH的区别

PATHCLASSPATH
PATH是环境变量。CLASSPATH也是一个环境变量。
操作系统使用它来查找可执行文件(.exe)。Application ClassLoader使用它来查找.class文件。
在PATH里写的包含.exe文件的目录。在CLASSPATH里写的是包括所有包含.class和JAR文件的目录。
PATH环境变量一旦设置,就不能被覆盖。可以通过对javac和java命令使用命令行选项-cp或-CLASSPATH来覆盖CLASSPATH环境变量。

四、CLASSPATH的作用

和PATH变量不同,CLASSPATH环境变量的作用是指定Java类所在的目录(或许它的意思就是PATH of Class)。

当运行java程序的时候,要指定相应的类名,比如,下面的例子中,在C:\test\目录下写一个HelloWorld,并执行:

c:\test>type HelloWorld.java   #查看文本文件的内容
public class HelloWorld{
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                System.out.println("Hello World!!");
        }
}
c:\test>javac HelloWorld.java   #因为配置了PATH环境变量,在任意目录下都可执行javac

c:\test>dir   #查看编译生成的class文件
2016/03/28  22:13               427 HelloWorld.class
2016/03/28  22:08               152 HelloWorld.java
c:\test>java HelloWorld   #运行HelloWorld(注意,不能加.class后缀)
错误: 找不到或无法加载主类 HelloWorld

这里报错找不到或无法加载主类 HelloWorld,前面说到

CLASSPATH环境变量的作用是指定Java类所在的目录。

下面看下此时环境中CLASSPATH环境变量的值是什么:

c:\test>echo %CLASSPATH%
C:\Program Files\Java\jdk1.8.0_51\lib\tools.jar;C:\Program Files\Java\jdk1.8.0_51\lib\dt.jar
c:\test>

果真,没有HelloWorld.class所在的目录。下面我们通过手动指定CLASSPATH解决该问题:

c:\test>java -classpath . HelloWorld
Hello World!!
c:\test>

实际上,和PATH环境变量也是由左到右搜索的,所以,在向CLASSPATH中添加新的目录时,通常将其放在最左侧。下面的例子中,在指定-classpath选项的参数时,引用了%CLASSPATH%环境变量:

c:\test>java -classpath .;%CLASSPATH% HelloWorld
错误: 找不到或无法加载主类 Files\Java\jdk1.8.0_51\lib\tools.jar;C:\Program
c:\test>java -classpath ".;%CLASSPATH%" HelloWorld
Hello World!!
c:\test>echo ".;%CLASSPATH%"
".;C:\Program Files\Java\jdk1.8.0_51\lib\tools.jar;C:\Program Files\Java\jdk1.8.0_51\lib\dt.jar"

ps:如果刚装完JDK,没有配置环境变量,那么缺省的%CLASSPATH%环境变量的值是.,也就是当前目录。

五、 如何设置Java的CLASSPATH

5.1 通过添加系统的环境变量

第一步:在桌面右击“计算机”图标,选择“属性”, 点击高级系统设置,在“高级”选项卡,点击下方“环境变量”按钮。

image.png

第三步:单击“新建”按钮,然后将变量名输入“CLASSPATH”,值输入:

.;C:\java\jdk_17\lib\lib\dt.jar;C:\java\jdk17\lib\lib\tools.jar

image.png

在CLASSPATH环境变量当中配置了”.”之后,我们通常还会把JDK安装路径下的lib文件夹下的dt.jar和tools.jar这两个文件的位置也加入到CLASSPATH环境变量中,这又是为什么呢?就是因为这两个jar文件是JDK是提供给我们的两个基础类库。dt.jar是关于运行环境的类库,而tools.jar是工具类库。没有这两个类库支持,很多Java程序压根就无法运行,所以我们在配置环境变量的时候,要把它们的路径也加入到CLASSPATH当中,以确保程序能够正确的调用到基础类库中的类。


dt.jar:运行环境类库,主要是Swing包,这一点通过用压缩软件打开dt.jar也可以看到。如果在开发时候没有用到Swing包,那么可以不用将dt.jar添加到CLASSPATH变量中。


tools.jar:工具类库,它跟我们程序中用到的基础类库没有关系。我们注意到在Path中变量值bin目录下的各个exe工具的大小都很小,一般都在27KB左右,这是因为它们实际上仅仅相当于是一层代码的包装,这些工具的实现所要用到的类库都在tools.jar中,用压缩软件打开tools.jar,你会发现有很多文件是和bin目录下的exe工具相对性的。


注意:

从JDK1.5开始,Java运行时环境(JRE)有了自动搜索当前文件夹下.class文件,并自动加载dt.jar和tools.jar类库文件的功能,所以, 从JDK1.5开始,可以不用配置CLASSPATH环境变量了 !


5.2 通过命令行方式设置

在命令提示符中键入以下命令,然后按Enter。

set CLASSPATH=%CLASSPATH%;C:\java\jdk_17\lib\dt.jar;C:\java\jdk_17\lib\tools.jar; 

在上面的命令中,Set是一个内部DOS命令,它允许用户更改变量值。CLASSPATH是变量名。用百分号(%)括起来的变量是现有的环境变量,分号是分隔符。

腾讯云推出云产品限时特惠抢购活动:2C2G云服务器7.9元/月起
本文链接:https://www.jhelp.net/p/wsA6K0MtAKvSXVMt (转载请保留)。
关注下面的标签,发现更多相似文章