系统变量 JAVA_HOME的作用
系统变量 PATH 的作用
系统变量 CLASSPATH 的作用
总结
程序猿学习一门编程语言首先要做什么?答案当然是搭建这门语言的开发环境了,没有语言的开发环境怎么学习编程。但是每一个新手几乎都是按照书籍或者博客上的教程搭建的开发环境,这就导致很多人始终不知道Window系统中的 Path 和 ClassPath 到底是干什么的,为啥要在Windows环境变量中配置它们,这篇博文将带你了解它们。
我们以最热门的编程语言Java 为例,其他编程语言都是一样的道理。Windows下 Java 用到的环境变量主要有3个,分别为 Path、ClassPath、JAVA_HOME。
首先很多人都会有个疑惑:有些博客使用的是PATH、CLASSPATH和JAVA_HOME,但是有些博客又是 path、classpath 和 java_home ,搞得新手是一头雾水,还没学习编程已经就懵了。其实这是因为Windows操作系统不区分大小写,设置Path和PATH并没有区别;而Linux操作系统是区分大小写的,设置Path和PATH是有区别的,因此只需要设置PATH环境变量即可。
系统变量 JAVA_HOME的作用
很多教程配置JDK环境变量的时候,都会让你新建一个系统变量 JAVA_HOME, 然后将这个系统变量的值指向JDK的安装目录,如下图这样:
这样做的好处:
一是为了方便引用
比如,你的JDK安装在下面的目录里,并且将这个目录路径设为你的 JAVA_HOME 值:
C:\Program Files\Java\jdk1.8.0_91
为了避免你每次引用 JDK的安装目录 都要输入很长的路径串,你只需输入下面这行语句即可:
%JAVA_HOME%
二则是归一原则
当你JDK路径被迫改变的时候(比如JDK需要升级了), 你仅需更改 JAVA_HOME 的变量值即可, 否则你就要更改任何引用JDK目录绝对路径的地方, 万一你要是没有改全, 某个程序找不到JDK, 后果是可想而知的。
系统变量 PATH 的作用
当你在计算机安装JDK之后,输入“javac”或者“java”之类的命令是不能马上被计算机正确执行的,因为计算机不知道到哪里去找这两个命令。
那么计算机该如何查找你输入的命令呢? Windows操作系统是根据 环境变量PATH 来查找命令的。环境变量PATH 的值是一系列路径,Windows操作系统将在这一系列的路径中依次查找命令,如果能找到这个命令,则该命令是可执行的;否则将出现“‘XXX’不是内部命令或外部命令,也不是可运行的程序或批处理文件”的提示。
对于Windows系统而言,一般情况下 系统变量Path 已经存在,你可以直接点击 编辑 修改该环境变量,如果没有的话你就新建一个名为PATH的环境变量,在该环境变量值后面追加如:
%JAVA_HOME%\bin;
或者这样:
C:\Program Files\Java\jdk1.8.0_91\bin;
这两种都是正确的,但是为了以后修改维护方便还是建议使用:%JAVA_HOME%\bin;
系统变量 CLASSPATH 的作用
它的作用是指定类搜索路径,要使用已经编写好的类,JVM就是通过CLASSPATH来寻找 Java类的。
实际上,如果你安装的是1.5版本以上的JDK,完全是可以不用设置 环境变量CLASSPATH的。
CLASSPATH 环境变量的作用是什么呢?在1.4版本以前的JDK,当使用“java 类名”命令来运行Java程序时,计算机需要根据 CLASSPATH 来搜寻Java类。
1.4以前的版本,常常需要设置CLASSPATH环境变量的值为:
.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;
首先要注意的是最前面的”.;”,注意是点分号。这个是告诉JDK,搜索 Class 时先查找当前目录的CLASS文件,之所以这样搞是由于Linux的安全机制引起的,Linux 用户很明白,Windows 用户就很难理解(因为 Windows 默认的搜索顺序是先搜索当前目录的,再搜索系统目录的,再搜索 PATH 环境变量设定的) ,所以如果喜欢盘根究底的朋友不妨研究一下 Linux。
后来的 JRE 会自动搜索当前路径下的类文件,自动加载 dt.jar 和 tools.jar 文件中的 Java类,不再需要设置环境变量CLASSPATH。一旦你设置了这个环境变量, JRE 将只按照环境变量的设置来搜索Java类,所以环境变量一定要设置正确。
总结:
JAVA_HOME是为了给你方便用的;
PATH 是给操作系统(OS)用的 ;
CLASSPATH 是给Java(JVM)用的;
大家喜欢可以多多关注,你的关注是我最大的动力。
作者:大数据首席数据师
链接:https://www.jianshu.com/p/b03cb860eb76