一、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的区别
PATH | CLASSPATH |
---|---|
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 通过添加系统的环境变量
第一步:在桌面右击“计算机”图标,选择“属性”, 点击高级系统设置,在“高级”选项卡,点击下方“环境变量”按钮。
第三步:单击“新建”按钮,然后将变量名输入“CLASSPATH”,值输入:
.;C:\java\jdk_17\lib\lib\dt.jar;C:\java\jdk17\lib\lib\tools.jar
在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是变量名。用百分号(%)括起来的变量是现有的环境变量,分号是分隔符。
本站推荐
-
1248
-
1038
-
595
-
510
-
490