一、 编译和运行Java程序必须经过两个步骤:
1、将源文件编译成字节码;
2、解释执行平台无关的字节码程序。
二、问题
以上两个步骤分别需要使用javac和java两个命令(javac命令对java源文件进行编译生成class文件,java命令对生成的class文件进行运行),如果我们直接在cmd命令行窗口里依次输入javac和java命令,可能会看到以下错误:
另外当我们移动了class文件后,执行java命令时,会出现以下错误:
三、分析问题
我们已经在计算机里安装了JDK,而jdk的安装路径下也包含了java和javac命令,为什么会出现这样的错误。
错误一:原因是命令行或控制台没有找到javac和java命令。
当我们输入javac或java命令时,命令行会先在当前目录中(上例为:E:/Demo/java)查找是否有javac.exe或java.exe 这个文件,若没有则在系统的path环境变量中查找。
错误二:这是因为命令行没有找到class文件。
当我们执行java命令时,若没有配置classpath环境变量,则java虚拟机会在当前目录下查找class文件(即Java类),若当前目录下没有,则会出错;若我们配置了classpath环境变量,则java虚拟机会直接到环境变量指定的路径查找。
四、解决方案
错误一:
根据问题分析,错误一的解决方案有两种:一是需要我们找到文件所在目录,二是直接在系统里配置path环境变量。
很显然第一种方法太麻烦了些,而第二种方法可谓是一劳永逸,它可以让我们在任意目录下都可以执行程序。那得如何配置path环境变量呢?
path环境变量
Windows操作系统根据Path环境变量来查找命令。PATH环境变量的值是一系列路径,如我的计算机里的path变量是这样的:
D:\TELLHOW\java\jdk1.5.0_09\bin;%CATALINA_HOME%\lib;%CATALINA_HOME%\bin;C:\Windows\System32;D:\app\Administrator\product\11.2.0\dbhome_1\BIN;D:\Program Files\MySQL\MySQL Server 5.5\bin
Windows将在这一系列的路径中依次查到命令,如果能找到这个命令,则该命令是可执行的,否则就会出错。
(path和PATH在Windows操作系统中是没有区别的,它不区分大小写)
因此,我们只需找到javac和java命令的存放路径,如:D:\TELLHOW\java\jdk1.5.0_09\bin,添加进path环境变量中即可,注意用“;”分号隔开。
我们可以在命令行内直接输入javac,按“Enter”键来验证配置是否正确,若看到以上信息(这其实是javac.exe的使用信息,以后我们会用到里面的几个),则表示配置正确(这与路径“E:/Demo/java”无关)。
写到这可能有人会问,“E:/Demo/java”是谁的地址呢?很显然这是程序javac.exe所运行文件Test.java的路径。
错误二:
几乎每一本介绍java入门的书里都会介绍classpath环境变量的配置,在网上也有很多,但对于classpath环境变量的作用则常常语焉不详。
其实,如果使用1.5以上版本的JDK,完全可以不用设置classpath环境变量就能正常运行程序。因为1.5版本以上JDK有一个功能,它会自动搜索当前路径下的类文件,而且使用Java的编译和运行工具时,系统可以自动加载dt.jar(是关于运行环境的类库,主要是swing的包)和tools.jar(是关于一些工具的类库)文件中的Java类,因此不再需要设置classpath环境变量了。
但是其之前的版本并没有这样的功能,所以我们会看到网上会有这样的配置:.;C:\ProgramFiles\Java\jdk1.7.0_05\lib\dt.jar;C:\Program Files\Java\jdk1.7.0_05\lib\tools.jar;
这个配置中前面一点表示当前路径,另外是将dt.jar和tools.jar两个文件添加到classpath环境变量里。
从上不知道你有没有发现问题,一个1.7版本的竟然还在使用1.4及以前的classpath环境变量配置方法,这似乎说明了一个问题,IT行业飞速发展,知识在不断地更新,网上其实有很多的知识是滞后的,所以我们必须重视这样的一个问题,不能太过实用主义。
那么classpath环境变量的作用是什么呢?
如果我们有很多类文件并放在不同的路径下,当我们需要执行指定路径下的文件时,这时classpath环境变量就体现了它的用处。
五、问题延伸
不知你有没有想过,在一些特殊的情况下我们可能会使用临时的环境变量配置。比方说我们借用别人的计算机时,却不能改动别人的计算机设置,这时你会怎么做?我想最好的办法就是一个移动U盘加临时环境变量配置。
临时环境变量配置可以使用DOS命令,在cmd命令行中输入set,你会看到你的计算机中所有的环境变量,如图所示:
而通过输入set path可显示出path的所有变量,如图:
而设置临时的path环境变量则只需输入:
set path=F:/Demo/java即可,它对计算机系统中的配置没有影响。
另有输入:
set path=F:/Demo/java;%path%
这表示在原有的设置上添加一个路径,对对计算机系统中的配置没有影响。
总结一下就是:
set:用于查看本机的所有环境变量;
set 变量名:查看一个具体的环境变量;
set 变量名=:清空一个环境变量;
set 变量名=具体值:给指定变量定义具体指;
set 变量名=具体值;%path%:在原有环境变量基础上添加新值。
注意:这种配置方式只在当前dos窗口有效,窗口关闭后则配置消失。
同理可得,classpath环境变量的临时配置也是一样,在此不多啰嗦。