一般在安装JDK事后须要配置两个环境变量:PATH和CLASSPATH(因为windows平台对系统变量的大小写没有要求,因此大小写均可以,可是Linux系统中只能用大写)。也许有人说还有一个JAVA_HOME, 其实这个变量的设置就是起到中转的做用吧,JAVA_HOME指向咱们的JDK安装目录,自定义这个变量的目的大概是让咱们比较方便的使用JDK安装目录吧(我的理解),因此JAVA_HOME无关紧要。java
要讲PATH和CLASSPATH这两个系统变量,就得先看一下JDK的根目录下面的几个文件夹了:windows
其中主要的就是bin、jre、lib三个文件夹了,工具
bin:该路径下存放了JDK的各类工具命令,经常使用 的有javac、java等;操作系统
jre:该路径下安装的就是运行java程序所必须的JRE环境;设计
lib:该路径下存放的是JDK工具 命令的实际执行代码程序,该文件夹下的dt.jar 和tools.jar是工具命令的类文件(.class);blog
下面咱们就来说一下PATH和CLASSPATH这两个系统变量:编译
首先编译和运行java程序须要两步骤:class
一、将.java源文件编译成.class字节码;变量
二、解释执行与平台无关的字节码程序;jdk
这两步分别用到javac 和java这两个命令。
当咱们运行这两个命令的时候,计算机是如何找到这两个命令的呢?也就是如何找到这两个命令的路径的?因此咱们就要为这样的工具命令设置路径,让计算机可以本身找到他们。windows操做系统都是根据系统变量PATH来查找命令的,因此咱们就将工具命令(bin目录)的路径加到path路径上面,计算机就能找到了(将D:\Java\jdk1.7.0_01\bin加入到path环境变量中):
环境变量中不一样路径之间用分号隔开,Linux下面用冒号隔开。
这样的话在dos环境里面运行java、javac等工具命令时,计算机就能自动找到命令所在路径并执行了。
接下来计算机根据path里面的路径找到命令了,可是这个路径(也就是bin目录)存放的是工具命令的一个引用(快捷方式吧),具体的工具命令程序是保存在lib目录下的,因此这个时候计算机单单找到工具命令还不行,还要找到它的执行体,而这个执行体都是一些java的通过编译后的.class文件(lib目录下的dt.jar和tools.jar),因此咱们要设置一个环境变量,将这两个文件(即类包dt.jar和tools.jar)路径放到 环境变量中,以便于计算机能找到执行。
而对于类文件,java设置了一个环境变量CLASSPATH专门来指向类文件,计算机根据这个环境变量下面的路径,就能找到相对应的类文件并执行了。因此jdk安装后,要把D:\Java\jdk1.7.0_01\lib\dt.jar;D:\Java\jdk1.7.0_01\lib\tools.jar两个路径加入到CLASSPATH中。
而咱们一般设置的CLASSPATH路径前面还有一个点,即完整的CLASSPATH是 .;D:\Java\jdk1.7.0_01\lib\dt.jar;D:\Java\jdk1.7.0_01\lib\tools.jar
这个点是用来干什么的呢?(假设有一个已经编译好了的java文件Hello.class)
咱们执行这个文件 java Hello 这个时候JRE是到哪里搜索这个文件呢?可能有人说当前路径下搜索啊!这是对的,是在当前路径下搜索,可是JDK1.4及以前的版本没有设计这个功能,这意味着即便当前路径包含着Hello.class这个文件,在执行 java Hello 这个命令时,系统也找不到Hello这个类。
因此在JDK1.4及以前的版本中须要在ClassPATH环境变量中添加一个点(.),用来告诉JRE须要在当前路径下搜索JAVA类。因此CLASSPATH也就有了上面的路径 (.;D:\Java\jdk1.7.0_01\lib\dt.jar;D:\Java\jdk1.7.0_01\lib\tools.jar)。
总之,classPATH这个环境变量就是用来寻找类的。把相应的类路径添加进去,系统就能自动检索到并执行。
在JDK1.5及以后发布的版本中,能够不用设置CLASSPATH这个环境变量了,由于JRE比之前更智能了,它会自动搜索当前路径下的类文件,并且在使用java的编译和运行工具时,系统也能够自动加载dt.jar和tools.jar文件中的java类,所以再也不须要设置CLASSPATH环境变量。
可是当咱们使用JDK1.5及以后发布的版本时,若是设置了CLASSPATH这个环境变量,JRE将会按照CLASSPATH环境变量指定的路径来搜索java类,而不会自动寻找java类的,因此要本身设置CLASSPATH的话,必定要设置正确,否则运行不了!