https://www.cnblogs.com/huangbingzhi/p/4277160.html

       首先是环境变量。引用百度百科的定义:

环境变量,是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息。例如Windows和DOS操作系统中的path环境变量,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到path中指定的路径去找。用户通过设置环境变量,来更好的运行进程。

  视窗操作让我们对这个概念认识的不清,可以这样认为,视窗操作封装了命令,与命令行一样都是给操作系统一个指令。因此当你在某个目录下,执行javac命令时候,他首先是要从当前目录找javac的执行文件,或许是个javac.jar或者是个javac.exe。如果找不到,则去操作系统设置的环境变量中去找,再找不到,就说没有这个指令。环境变量就是干这个活的。明白了环境变量这个概念后面的内容就好理解了。

  其次是JAVA_HOME。就是指java安装目录。这算是一个规定了,以后不管是oracle、tomcat或者其他需要用jdk、jrm的软件,都是直接去找操作系统中这个环境变量。或许你就是最先使用到这个环境变量的,比如你设置path的时候是“;%JAVA_HOME%\bin”,来代替“C:\Program Files (x86)\Java\bin”。“%JAVA_HOME%”就是使用了JAVA_HOME环境变量。

  第三是PATH环境变量。作用是指定java命令搜索路径。我们需要把 jdk安装目录下的bin目录增加到现有的PATH变量中,bin目录中包含经常要用到的可执行文件如javac、java、javaw等,设置好 PATH变量后,就可以在任何目录下执行javac/java等工具了。如果不进行设置,那你就只能先进入到这个目录下,才能使用那些命令了(当然也非未尝不可)。

  最后是CLASSPATH环境变量。他告诉Java执行环境,在哪些目录下可以找到您所要执行的Java程序所需要的类或者包通俗的说它的作用与import、package关键字有关,我们写的java源码中,当然会包含别人提供的工具类,比如当你写下improt java.util.*时,编译器面对import关键字时,就需要知道你要引入java.util这个package中的类到底在哪里。与上面的一样,如果不告诉,他就默认在当前目录下,而如何告诉它呢?就是设置CLASSPATH。