JAVA_HOME: jdk在本地安装的路径,例:C:\Program Files\Java\jdk1.8.0_74,此变量的作用是可以方便的修改jdk的安装路径,以免频繁修改系统PATH变量造成的风险。

PATH: 将jdk中的java命令所在目录配置到原有的PATH中,例如:PATH=%JAVA_HOME%\bin;(这里也可以不引用JAVA_HOME)使得系统可以在任何路径下都可以识别由jdk提供的外部命令,如java,javac。

CLASSPATH: 是JVM用到的一个环境变量,它用来指示JVM如何搜索class。

因为java是解释型语言,源码文件是.java,编译后的.class文件才是真正被JVM解释的字节码,因此,JVM需要知道,如果要加载一个abc.xyz.Hello的类,应该要到哪里去找到对应的Hello.class文件。

所以,CLASSPATH就是一组目录集合,它设置的搜索路径与操作系统有关,在windows系统上用;分隔,带空格的目录用""括起来。

C:\work\project1\bin;C:\shared;

在Linux系统上用:进行分隔

/home/veani:/etc

现在我们假设classpath是.;C:\work\bin;C:\shared,当JVM在加abc.xyz.Hello这个类时候,会根据路径依次查找

  • <当前目录>\abc\xyz\Hello.class
  • C:\work\bin\abc\xyz\Hello.class
  • C:\shared\abc\xyz\Hello.class

.代表的是当前目录,如果JVM在这些目录下找到了对应的.class文件,就不再寻找了,如果在所有路径下都没有找到,那么就会报错。

classpath的设置方法有两种,一是在系统变量中设置(不推荐),二是在启动JVM时设置classpath,实质上就是给java传入-classpath或-cp参数。

java -classpath .;C:\work\bin;C:\shared abc.xyz.Hello
java -cp .;C:\work\bin;C:\shared abc.xyz.Hello

没有设置系统环境变量,也没有传入-cp参数,那么JVM的默认CLASSPATH目录为.,就是当前目录。

java abc.xyz.Hello

上述命令告诉JVM只在当前目录搜索Hello.class。

在IDE中运行java程序,IDE自动传入的-cp参数是当前工程的bin目录和引入的jar包。

通常我们自己编写的class中用到的java核心库中的class,例如String等,这些JVM会自己找。

不要把任何java核心库添加到classpath中,JVM不依赖classpath加载核心库

更好的做法是不要设置classpath,默认的当前目录.对于绝大多数情况都适用。

配置java环境 配置java环境变量的作用_java

classpath为".",当前目录有Hello.class文件,输入java Hello,可以看到运行成功。

配置java环境 配置java环境变量的作用_java_02

进入/home目录,可以看到此时目录下没有.class文件,再次运行java Hello,系统报错,这是因为classpath中的路径配置不对。因为我们要运行的Hello类所对应的Hello.class不在当前目录下,而是在/home/briup/桌面 中。

配置java环境 配置java环境变量的作用_JVM_03

利用-cp参数指定目录,告诉JVM在此目录搜索Hello.class,可以看到运行成功。