配坏境变量(PATH、JAVA_HOME、CLASSPATH)到底是在配什么?
声明:由于是给初学者看的,所以不会深入太深(JVM什么的)。
最近女朋友在开始学JAVA,遇到了以前每个初学者都会经历的一步:安装好JDK后配置环境变量。到这句话其实已经出现了四个问题:
- 为什么说以前?
- 什么是JDK?
- 为什么要安装JDK?
- 为什么要配置环境变量?
先来回答第二个问题:什么是JDK?
JDK:Java Development Kit。初学者从官网上下载的都是Java SE Development Kit,即JAVA标准版开发工具。标准版即基本的JAVA程序,对应的开发工具就是用来开发基本的JAVA程序(对应企业版EE,做JAVA WEB的会接触到)。
所以说JDK是一个给JAVA应用程序开发人员使用的开发工具(对应给JAVA用户使用的JRE,后边会讲)。具体包括些什么呢?从安装过程中我们可以看到:



可以看到,主要是有三部分:
-
开发工具:即JDK本身,会着重介绍。下边的两个都不属于JDK,是可选的。
-
源代码:即公共api类的源代码。公共api类是什么?公共api类也可以叫做Java核心类库,可以理解为JAVA平台自带的可以实现一些基本功能的JAVA程序(.class文件,放在lib文件夹下)。一个简单的例子:在编写一个JAVA程序输出Hello World时,程序员不需要考虑怎么输出,只要使用“System.out.print("Hello World")”这条语句就可以实现。System.out.print()就是公共api的使用(具体是System和PrintStream这两个JAVA程序)。 公共api类的源代码就是生成这些程序(.class字节码文件)的原始文件(.java文件,都放在src.zip这个压缩包里)。开发过程中经常会需要查看某个公共api类的源代码,所以该项建议安装。
-
公共JRE:JRE又是什么?JRE(Java Runtime Environment),JAVA运行时环境,它包括JVM(即Java虚拟机,JAVA程序都是在虚拟机上运行的)、公共api类(Java核心类库)和支持文件。主要的就是JVM和公共api类。JVM是运行JAVA程序必不可少的;公共api类上边有讲,基本上正常人写的JAVA程序都会需要公共api类的支持(除非有哪个闲得慌的自己写一套基础api类来用)。通过这些,JRE就提供了一个可以运行JAVA程序的环境,有了它用户和开发者就可以运行JAVA程序了(通过java.exe)。公共JRE是可选的,因为在开发工具这个选项里已经包括了一个专用JRE,所以不建议安装。
有了这些概念,就终于可以解释什么是开发工具(即JDK)了,JDK除了一个给它自身JAVA工具使用的(当然用户也可以使用)JRE(主要包括JVM和公共api),还包括可以将编写的.java源文件编译成虚拟机可以识别运行的.class字节码文件的编译器(javac.exe)。此外还有很多java程序调试和分析的工具:jconsole,jvisualvm等工具软件,一些版本还会有java程序编写所需的文档和demo示例程序。
总结一下,JDK即由JRE(即java.exe,由JVM+API组成)+编译器(即javac.exe)+其他功能组成。有了JDK,JAVA开发人员就可以开发JAVA程序了。
接着来回答第四个问题:为什么要配置环境变量?
环境变量是什么?这个定义是什么不重要,但要知道开发JAVA会接触到的三个环境变量:PATH、JAVA_HOME、CLASSPATH。
-
JAVA_HOME是什么?顾名思义,JAVA的主目录,这里其实指的就是JDK或者JRE的主目录,视情况而定,因为这条环境变量主要有两个作用:1、方便你在配后边两个变量时引用,省得把整个路径名都写上了,为了实现这个作用此时的JAVA_HOME就需要是JDK的主目录。从这个作用来看JAVA_HOME完全没有配置的必要。2、一些基于JAVA实现的程序(比如Tomcat,实现了JAVA EE规范,做web会接触到)在运行时需要需要通过JAVA_HOME来寻找JRE运行,这个时候这个变量名也可以设置成JRE_HOME。为了实现这个作用此时的JAVA_HOME就需要是JRE的主目录。从这个作用来看,还是需要配置的。
-
PATH是什么?配置PATH和java没有关系,这个变量是配置给计算机看的,告诉计算机你在cmd这个黑窗口里运行的命令(实际上是.exe或者.bat文件)从哪里找。那开发JAVA会运行哪些命令呢?一个是javac,用来把写好的java文件编译成字节码文件,实际上就是运行的JDK里的编译器(javac.exe),所以要把这个文件在哪个文件夹下(jdk/bin路径下)告诉计算机,好让计算机在看到你这个指令的时候能执行javac.exe这个程序。 还有一个是java,用来运行你编译好的字节码文件,实际上就是运行JDK(或JRE)里的java.exe文件,同样,要把java.exe的位置(jdk/bin路径下)告诉计算机(如果你安装了公用JRE,此时也可以用jre/bin这个位置)。 然而只是为了实现这个作用完全可以将cmd的当前路径切换到jdk/bin目录下,这样计算机就可以找到这两个文件了。那PATH也没必须要配吗?并不,有些基于JAVA实现的程序(比如Eclipse)与Tomcat不同,在运行时会去PATH里找java.exe这个程序来运行,如果找不到,Eclipse就启动不了。但是,从某个版本开始,在安装完JAVA重启电脑以后,java会自动在PATH的最前面加一个路径:C:\ProgramData\Oracle\Java\javapath,这个自动生成的路径下就有java.exe这个文件(但没有javac.exe)。因为计算机在找路径时是从变量值里从前往后找的,所以你跟着教材配了PATH也没用,除非放在所有变量值的最前面。由此可见,PATH也是没必要配的。
-
CLASSPATH是什么?顾名思义,CLASS的路径,这里的CLASS指的是JAVA最基本的概念类(CLASS),而不是.class这个字节码文件。旧版JAVA在运行javac或java时都会用到CLASSPATH。用javac编译class文件时,如果引用了(如继承)其他类(比如说公共api类或者自己写的类),编译器在当前目录找不到这个类的话就要通过CLASSPATH去找,然后把每个用到的类都编译成.class文件。运行时也一样,只不过是把从.java文件的找类然后编译的过程换成了从.class文件里找类然后运行的过程。在旧版JAVA教材中要配置三个路径:1、“.”(英文句号)代表从当前路径下找(这个是最蠢最没用的一个配置);2、rt.jar,这个jar包里就是核心类库,最基本的输出就要依赖这个类库;3、tools.jar,包括运行javac时需要的工具类库。但在JAVA1.5以后,执行这两个命令都不需要CLASSPATH了,因为1.5规范在执行这两个命令时会自动导入这几个依赖的类库(可以用 -verbose这个参数验证)。所以CLASSPATH也是不需要配置的。
由此可见,1.5以后的JAVA完全没必要配置环境变量。同时这也是第一个问题的答案。
那么第三个问题:为什么要安装JDK?
在知道了第二个问题的答案后再看这个问题似乎很蠢,当然是为了开发JAVA啊。但JDK只是为了你在CMD里编JAVA的,可现在有人在CMD编写调试JAVA吗?当然没有,有那么多的集成开发平台(比如Eclipse),完全没必要去安装JDK开发。为什么呢?因为所谓集成,顾名思义就包括了很多开发必要的工具。那具体集成了什么呢?主要是编译器+核心类库,有了这两个就可以开发JAVA程序了,但他没有集成JRE,因为它本身就是一个基于JAVA的程序,它的运行也需要借助JRE运行。运行Eclipse的这个JRE也是运行你在Eclipse上编写的JAVA程序的JRE。而且Eclipse对每个项目都会有一个对应的CLASSPATH(即Bulid Path)。
所以,如果你用开发平台进行开发,完全没必要下载JDK,也没必要配置和JDK相关的环境变量!只需下载供Eclipse运行的JRE然后重启电脑就可以了。
回过头来看引出这一堆问题的操作:”以前每个初学者都会经历的一步:安装好JDK后配置环境变量“,似乎并没有什么意义╮(╯-╰)╭
参考:http://blog.sina.com.cn/s/blog_7ffb8dd501011shd.html
http://blog.csdn.net/deitytu/article/details/11533123
http://blog.csdn.net/cheney521/article/details/8672066
posted on 2018-01-22 00:17 Dracen_Lee 阅读(358) 评论(0) 收藏 举报
浙公网安备 33010602011771号