Java语言的初学者安装完JDK之后,在命令行中键入"java","javac"命令时通常会看到如下输出:

"java"不是内部或外部命令,也不是可运行的程序或批处理文件。

"javac"不是内部或外部命令,也不是可运行的程序或批处理文件。

这是安装好JDK之后没有正确配置PATH环境变量的结果。通常情况下安装JDK时会出现PATH、CLASSPATH、JAVA_HOME等概念,接下来将一一介绍如何配置这些变量,并介绍相应的作用。

配置环境变量的步骤:右键点我的电脑-->属性-->高级-->环境变量-->系统变量,此时需要设置PATH、CLASSPATH、JAVA_HOME三个属性,如果之前没有配置过JDK的环境。那么可以看到PATH是存在的。而JAVA_HOME和CLASSPATH是不存在的。

首先配置JAVA_HOME,假如我把JDK安装在d盘根目录下,文件夹名为jdk1.6.0,那么JAVA_HOME的变量值就是D:\jdk1.6.0,需要点击“新建”,变量名为“JAVA_HOME”,变量值为“D:\jdk1.6.0”。

其次配置PATH,PATH指的是Windows系统的环境变量,该变量已经存在,只需要选择PATH,点击编辑按钮,在变量值最后加上“D:\jdk1.6.0\bin”即可,也可以写作“%JAVA_HOME%\bin”,其中%JAVA_HOME%就代表Java的安装路径。

最后配置CLASSPATH,需要点击“新建”,变量名为“CLASSPATH”,变量值常常设置为“.;D:\jdk1.6.0\lib\tools.jar;D:\jdk1.6.0_10\lib\dt.jar”,也可以写作“.;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar”。

这样,我们就可以在对Java进行编译运行了。

那么,PATH、CLASSPATH、JAVA_HOME究竟代表什么意思呢?它们分别有什么作用呢?

1、JAVA_HOME环境变量。

JAVA_HOME环境变量指的是Java的安装路径,设置JAVA_HOME主要有以下三个好处:

1)方便引用。在以后使用Java安装路径的时候可以使用%JAVA_HOME%代替,避免每次都要输入Java安装路径,特别是遇到Java的安装路径比较长的情况。

2)方便更替。如果以后重新安装JDK,Java安装路径就要修改,此时只需要修改Java后的变量值即可,其他引用JAVA_HOME的地方都可以不用换。

3)假如第三方软件引用约定好的JAVA_HOME变量,,如果没有设置JAVA_HOME变量,第三方软件将不能正常使用该软件。

2、PATH环境变量。

要弄清楚配置PATH环境变量的意义,首先要明白PATH是什么,它本身有什么用?

PATH是Windows系统的环境变量,Windows操作系统根据path环境变量来查找命令,如果找到这个命令那么该命令是可执行的。就像我们在Windows操作系统中点击运行某个以exe结尾的程序一样,Windows系统执行命令本质上也是要执行某个程序文件,如果找不到这个命令,将出现"XXX不是内部或外部命令,也不是可运行的程序或批处理文件”。

我们在“%JAVA_HOME%\bin”路径下可以看到有一个名为“javac.exe”的程序文件,执行javac命令就是在执行这个程序文件,为了让Windows系统找到并使用javac命令,就需要配置PATH环境变量,告诉Windows系统javac命令所在位置。其它的命令如java等道理也是如此。

3、CLASSPATH环境变量。

设置CLASSPATH的目的,在于告诉Java执行环境,在哪些目录下可以找到您所要执行的Java程序所需要的类或者包Java执行环境本身就是一个平台,执行于这个平台上的程序是已编译完成的Java程序(后面会介绍到Java程序编译完成之后,会以.class文件存在)。如果将Java执行环境比喻为操作系统,如果设置PATH变量是为了让操作系统找到指定的工具程序(以Windows来说就是找到.exe文件),则设置CLASSPATH的目的就是让Java执行环境找到指定的Java程序(也就是.class文件)。

在Java1.4以前版本的JDK中,使用“java Java类名”命令运行Java程序,JRE并不会在当前路径下搜索Java类,因为ava1.4以前版本的JDK都没有设置这个功能。如果使用Java1.4以前版本的JDK,则需要在CLASSPATH环境变量中添加一点(“.”),用来告诉JRE需要在当前路径搜索Java类。除此以外,编译和运行Java程序可能还需要JDK的lib路径下dt.jar和tool.jar文件中的Java类,因此还需要把这两个文件添加到CLASSPATH环境变量中。总之,如果使用1.4以前版本的JDK来编译和运行Java程序,通常需要设置CLASSPATH环境变量的值为“.;D:\jdk1.6.0\lib\tools.jar;D:\jdk1.6.0_10\lib\dt.jar”。

后来的JRE会自动搜索当前路径下的类文件,并且使用Java的编译和运行工具时,系统可以自动加载dt.jar和tool.jar文件中的Java类,因此不再需要设置CLASSPATH环境变量。换句话说,只有使用早期版本的JDK时才需要设置CLASSPATH环境变量。

我们在编辑环境变量时,有用户变量和系统变量之分。那么用户变量和系统变量之间有什么区别呢?

用户变量只对当前用户用户有效,而系统变量则对所有用户有效。设置用户变量是为了减少自己所做的修改对其他用户的影响。因此对于当前用户来说,设置用户变量和设置系统变量效果大致相同,只是系统变量的路径排在用户变量的路径之前。以java命令为例,假如path系统变量的变量值包含java命令,同时path用户变量的变量值也包含java命令,则优先执行path系统变量里包含的java命令。