在计算机操作系统中可以定义一系列变量,这些变量可供操作系统上所有应用程序使用,称为系统环境变量。在学习Java的过程中,需要配置path和classpath两个系统环境变量,下面分别对它们的配置进行详细讲解。
path环境变量用于保存一系列命令(可执行程序)路径,每个路径之间以分号分隔。当在命令行窗口运行一个可执行文件时,操作系统首先会在当前目录下查找是否存在该文件,如果未找到,操作系统会继续在path环境变量中定义的路径下寻找这个文件,如果仍未找到,系统会报错。例如,在命令行窗口使用“javac”命令,系统提示错误,如图1-13所示。
从图1-13的错误提示可以看出,系统没有找到javac命令。在命令行窗口输入“set path”命令,查看当前系统的path环境变量,如图1-14所示。
图1-13 找不到javac.exe命令
图1-14 查看path环境变量(1)
从图1-14中列出的path环境变量可以看出,path环境变量定义的路径并没有包含“javac”命令所在的目录,因此操作系统找不到该命令。
为了解决这个问题,需要将javac命令所在的路径添加到path环境变量中,添加的命令如下:
set path=%path%;C:\Program Files\Java\jdk1.8.0_201\bin
在上述命令中,“ %path%”表示引用原有的path环境变量;“C:\Program Files\Java\jdk1.8.0_201\bin”表示javac命令所在的目录。整行命令的作用就是在原有的path环境变量值中添加javac命令所在的目录。
在图1-14中添加javac命令路径之后,再次输入“set path”命令查看path环境变量,结果如图1-15所示。设置完path环境变量后,再次运行“javac”命令,系统就会显示“javac”命令的帮助信息,如图1-16所示。
图1-15 查看path环境变量(2)
图1-16 javac命令的帮助信息
由于“java”命令和“javac”命令位于同一个目录中,因此在配置完path环境变量后,同样可以在任意路径下执行“java”命令。
配置完path环境变量后,重新打开一个新的命令行窗口,再次运行“javac”命令,又会出现与图1-13一样的错误,使用“set path”命令查看环境变量,会发现之前的设置无效了。出现这种现象的原因在于,在命令行窗口中,对环境变量进行任何修改只对当前窗口有效,一旦关闭窗口,所有的设置都会失效。如果要让环境变量永久生效,就需要在系统中对环境变量进行配置,让Windows系统永久性地保存所配置的环境变量。配置系统环境变量的步骤如下。
1.查看Windows系统属性中的环境变量
右键单击桌面上的“计算机”图标,选择“属性”选项,在弹出的“系统”窗口左侧选择“高级系统设置”选项,弹出“系统属性”对话框,在“系统属性”对话框的“高级”选项卡下单击【环境变量】按钮,弹出“环境变量”对话框,如图1-17所示。
图1-17 “环境变量”对话框
2.设置path系统环境变量
图1-17中,在“系统变量”区域中选择名为“PATH”的系统变量,单击【编辑】按钮,打开“编辑系统变量”对话框,如图1-18所示。
图1-18 “编辑系统变量”对话框
如图1-18所示,在“变量值”文本框内容的末尾,追加“ javac ”命令所在的目录路径“ C:\ProgramFiles\Java\jdk1.8.0_201\bin”。需要注意的是,变量值文本框中有很多配置路径,路径与路径中间需要使用英文半角分号(;)隔开。javac命令所在路径追加完成后的效果如图1-19所示。
图1-19 javac命令所在路径追加完成后的效果
在图1-19中添加完成后,依次单击所有打开对话框的【确定】按钮,完成path系统环境变量的设置。
3.查看和验证设置的path系统环境变量
打开命令行窗口,执行“set path”命令,查看设置后的path变量的变量值,如图1-20所示。
从图1-20可以看出,环境变量的第一行已经显示出了javac命令的路径信息。在命令行窗口中执行javac命令,如果能正常显示帮助信息,说明系统path环境变量配置成功,这样系统就永久性地保存了path环境变量的设置。
图1-20 查看path环境变量(3)
classpath环境变量用于保存一系列类包的路径,它与path环境变量的查看和配置方式完全相同。当Java虚拟机需要运行一个类时,会在classpath环境变量定义的路径下寻找所需的.class文件和类包。
打开命令行窗口,进入C盘根目录下执行“java HelloWorld”命令,运行之前编译好的HelloWorld程序,结果会报错,如图1-21所示。
图1-21 运行程序报错
图1-21中命令出现错误的原因在于,Java虚拟机在运行程序时无法找到HelloWorld.class文件,即在C盘根目录下没有HelloWorld.class文件。为了纠正这个错误,首先通过“set classpath”命令查看当前classpath环境变量的值,确认当前classpath是否保存了HelloWorld.class文件路径,查看结果如图1-22所示。
图1-22 查看classpath环境变量
从图1-22中可以看出,当前classpath环境变量没有定义,为了让Java虚拟机能找到所需的.class文件,就需要对classpath环境变量进行设置,保存HelloWorld.class文件路径。在命令行窗口输入下面的命令:
set classpath=C:\Program Files\Java\jdk1.8.0_201\bin
执行完上述命令之后,再次执行“java HelloWorld”命令运行程序,运行结果如图1-23所示。
图1-23 HelloWorld程序运行结果
从图1-23可以看出,“Java HelloWorld”命令成功运行,输出了“hello world”。在命令窗口中设置classpath后,程序会根据classpath的设置去指定的目录寻找类文件,因此,虽然C盘根目录下没有HelloWorld.class文件,但“Java HelloWorld”命令仍能正确执行。
classpath除了可以指定类的路径外,还可以指定运行Java程序所需的标准类包的路径。JDK提供的标准类包有两个,分别是dt.jar和tools.jar,它们位于JDK安装目录的lib文件夹下。在配置环境变量时,通常会将这两个JAR包配置到classpath中,且配置方式非常简单。在“环境变量”对话框中的“系统变量”区域单击【新建】按钮,弹出“新建系统变量”对话框,在“变量名”文本输入框中输入“CLASSPATH”,在“变量值”文本输入框中输入dt.jar和tools.jar两个类包的路径,如图1-24所示。
完成图1-24所示对话框中的配置之后,单击【确定】按钮即可。需要注意的是,在设置CLASSPATH变量时,必须在配置路径前添加“.;”(当前目录),用于识别当前目录下的Java类。
在1.3节中并没有设置classpath环境变量,但在“C:\Program Files \Java\jdk1.8.0_201\bin”目录下仍然可以使用“java”命令正常运行程序,而没有出现无法找到“HelloWorld.class”文件的错误。这是因为从JDK 5开始,如果classpath环境变量没有设置,Java虚拟机会自动将其设置为“.”,也就是当前目录。
图1-24 “新建系统变量”对话框