一些名词解析
- JDK: java development kit java开发工具包 = JRE+一些可执行程序 java的编译器javac和解释器java都位于jdk中的bin目录下
- JRE: java runtime environment java运行时环境 = JVM + lib类库信息[java写好提供给我们使用的一些组件,包括rt.jar、tool.jar等]
- JVM: java virtual machine java虚拟机 专门用来执行字节码文件(.class文件)的
- 注意:他们之间的关系时包含关系。jdk 包含 jre ,jre包含 jvm。
配置环境变量
解决寻址bin目录的问题
在环境变量中配置path
- 环境变量的配置: 在DOS命令行中去执行某个命令的寻址过程
- 当前路径下找
- 环境变量里面找[path]
- 用户变量
- 系统变量
- 配置环境变量:
- 右击计算机->属性->高级系统设置->环境变量->系统变量->path
千万注意:重新配置了环境变量一定要重启DOS系统,不然配置无法生效。
解决切换版本问题
有很多时候可能会频繁的切换版本,但是path
中的路径太多,可能会存在漏删或者多删除,导致整个path出现问题,所以我们多配置一项JAVA_HOME
。简化修改版本的代价。
后期切换版本。只需要动JAVA_HOME
即可。
解决寻找文件的问题
CLASSPATH
: 这个玩意在JDK1.5之后不需要配置。JDK1.5之前配置的目的是为了能够方便使用java
命令来解释执行对应的class类
信息。但是JDK1.5之后,java
命令可以独自去解释执行类信息,所以无需配置。
classpath
要么不配,要配置一定记得配置当前路径.
。
总结一下
就是说为什么要配置环境变量呢?根本原因就是想要在程序的任意的一个目录都可以使用javac
和java
这两个工具(也就是编译器和解释器)。
当我们输入一个命令的时候,系统首先在当前目录下查看能否使用这个目录,如果当前目录下没有对应的工具,系统就会从环境变量的path中寻找路径。
所以如果不配置环境变量的话只能在java
的jdk\bin
那个文件夹目录下面使用javac
和java
。
举个例子:
我们编译一个java
文件
C:\Program Files\Java\jdk1.8.0_131\bin>javac hello.java
我们解释一个class
类
C:\Program Files\Java\jdk1.8.0_131\bin>java hello
我们可以在jdk\bin
目录下很容易实现
而且因为我们刚刚配置了环境变量,所以我们可以在任意一个目录下使用javac
和java
C:\Users\mac\Desktop>javac hello.javaC:\Users\mac\Desktop>java hello
如果要编译不在本目录下的java
文件,只需要在java
文件之前添加上路径
C:\Users\mac\Desktop>javac 路径\hello.java
如果要解释不在本目录下的类,需要使用classpath
参数
C:\Users\mac\Desktop>java -classpath 类路径\主类
但是现在有一个问题,在java1.5
版本之前,java
解释器在解释java
类的时候需要使用一些工具来帮助他解释,比如rt.jar
和tool.jar
,这两个工具一般在jdk\jre\lib
中,所以说现在javac
是可以正常在任意目录下使用的,但是java
因为缺少了相关工具无法进行正常解释。
那要如何解决这个问题呢,我们可以将rt.jar
和tool.jar
这两个工具的路径添加到环境变量中,当java
在解释主类的时候,如果找不到这两个工具,就会到classpath
中去寻找,这样就可以在任意目录中使用java
去解释任意目录下的主类了。
在java1.5
版本之后,rt.jar
和tool.jar
都被内嵌到java
命令之中了,所以就不需要配置classpath
了。
要配置也可以,但是一定得注意在classpath
中添加./
,不然如果没有添加./
,而你又配置了classpath
,那么当你在解释类文件的时候,系统就会默认使用你配置的classpath
路径,也就是说系统默认以为你要解释的类是在classpath
的目录之下的。这样的话有可能就会找不到类文件。
补充一点,在配置环境变量的时候,我们一般将jdk
的路径存放在JAVA_HOME
之中,然后使用%JAVA_HOME%\bin
来表示编译器和解释器的路径,是因为如果我们要切换java
的版本,我们就必须改变环境变量中jdk
的路径,而path
中的参数又有很多,为了降低修改的错误成本,我们只需要修改JAVA_HOME
的路径就可以切换版本了。