学习是一个反复的过程,要不断的回归基础,这次回的有点大了,回到了Java的环境变量设置,我们来回顾一下配置Java开发环境的整个过程。
1、在Orcle官网下载JDK后安装到本地
这里有一个知识点
JDK、JRE、JVM的关系
-
JDK:Java Development Kit 是Java的标准开发工具包(普通用户只需要安装 JRE来运行 Java 程序。而程序开发者必须安装JDK来编译、调试程序)。它提供了编译、运行Java程序所需的各种工具和资源,包括Java编译器、Java运行环境JRE,以及常用的Java基础类库等,是整个JAVA的核心。这里强调一下jdk目录下lib文件夹下的dt.jar和tools.jar这两个基础类库,后面会说明这两个包的作用;
-
JRE:Java runtime environment 是运行基于Java语言编写的程序所不可缺少的运行环境,用于解释执行Java的字节码文件。
也是通过它,Java的开发者才得以将自己开发的程序发布到用户手中,让用户使用。JRE中包含了Java virtual machine(JVM),runtime class libraries和Java application launcher,这些是运行Java程序的必要组件。与大家熟知的JDK不同,JRE是Java运行环境,并不是一个开发环境,所以没有包含任何开发工具(如编译器和调试器),只是针对于使用Java程序的用户。
-
JVM:Java Virtual Machine 是Java的虚拟机,是JRE的一部分。它是整个java实现跨平台的最核心的部分,负责解释执行字节码文件,是可运行java字节码文件的虚拟计算机。
所有平台的上的JVM向编译器提供相同的接口,而编译器只需要面向虚拟机,生成虚拟机能识别的代码,然后由虚拟机来解释执行。
也就是说大概有如下图所示的关系:
2、配置环境变量
我们主要配置了三个系统变量:JAVA_HOME、Path、ClassPath,先来解释一下每个系统变量代表的意思。
-
JAVA_HOME
变量值为jdk的安装目录,如:D:\Java\jdk1.8.0_191,配置该变量的目的是为了方便后面两个变量,便于我们更好的管理。如果以后我们重新安装了jdk我们再来修改环境变量的时候只要修改JAVA_HOME就可以了,不配置JAVA_HOME也是可以的,但是还是建议配置,因为Eclipse/NetBeans/Tomcat等软件就是通过搜索JAVA_HOME变量来找到并使用安装好的jdk。
-
Path
变量值为 【%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;】
配置Path路径,是为了让系统知道你要用的命令在哪里(省去每次执行命令都要先定位到可执行文件所在目录,然后再执行命令这一麻烦步骤),也就是说你可以在计算机的任何目录下运行java/javac指令,因为系统会根据命令去扫描Path路径,查找到java.exe。为什么会这样呢?我们来分析一下变量值的三个部分。
一、%JAVA_HOME%\bin;
看到前面说的java.exe了吧,这个目录下还有其他很多可执行文件。把这个文件夹放到Path下,当你在cmd窗口运行某个指令时,系统就会首先进行扫描你配置的Path目录下有没有这个文件,有的话就执行,没有就报错呗。如果你不配置,你运行java指令肯定是不成功的。
二、%JAVA_HOME%\jre\bin;
前面说了jre和jdk的关系,配置这个变量的目的是为了确保jre(运行)在你使用javaIDE的时候不产生问题。你可以打开这个文件夹,里面也有java.exe等执行文件,也就是说只要有jre我们就可以运行java程序,
-
ClassPath
类加载路径,作用是指定类搜索路径,要使用已经编写好的类,前提当然是能够找到它们了,JVM就是通过ClassPath变量来寻找类的.class文件。
我们来看一下ClassPath变量的值:
【.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar; 】
一、.;
.代表当前目录;
百度解释:这是个优先级的问题。“.“代表的是挡墙路du径,以他开头,是为了程序zhi运行时,让他在当前路径去寻找额外的dao一些资源,比如说,你自己写的一些类。”;"是起着分割的作用,如果在前面的目中没有找到想要,那么会去很分号后面的目录中查找,就这样一级一级的找下去,知道classpath末尾,如果还没有找到,就报异常!
二、%JAVA_HOME%\lib\dt.jar;
dt.jar是关于运行环境的类库,tools.jar是工具类库 设置在classpath里是为了让jvm能根据路径找到这些所需的依赖。我们打开看看这另个包,里面都是jvm运行用到的.class文件。
3、总结
-
path是Windows查找.exe文件的路径;classpath是jvm查找.class文件的路径
-
JAVA_HOME
- 为了方便引用;
- 归一原则;
- 第三方软件会引用约定好的JAVA_HOME变量, 否则不能正常使用该软件;
-
CLASSPATH
- 这个变量设置的目的是为了程序能找到相应的".class"文件;
- 设置CLASSPATH中的dt.jar和tools.jar,因为这些jar包可能在编译运行java类中用到,如果一个代码程序引用了一个包而这个包在其他盘里则会出现报错,只有我们把包的地址给添加进CLASSPATH中,原程序则可以执行;
-
PATH
每次都使用%JAVA_HOME%\bin\java 来执行java命令将会很繁琐 ,我们将%JAVA_HOME%\bin添加到PATH路径, 我们则可以在任何路径下直接用java来执行命令了,操作系统会在当前目录和PATH变量目录里查找相应的应用程序, 并且执行;