前言:jdk配置了好多次了,每次都是安装网上的教程配的,一直弄不清其中的原理!
通常在安装JDK过后需要配置两个环境变量:PATH和CLASSPATH(由于windows平台对系统变量的大小写没有要求,所以大小写都可以,但是Linux系统中只能用大写)。
也许有人说还有一个JAVA_HOME, 其实这个变量的设置就是起到中转的作用吧,JAVA_HOME指向我们的JDK安装目录,自定义这个变量的目的是让我们方便的使用JDK安装目录,类似%JAVA_HOME%\bin;,所以JAVA_HOME可以不设置,直接使用绝对路径。
要讲PATH和CLASSPATH这两个系统变量,就得先看一下JDK的根目录下面的几个文件夹了:
其中主要的就是bin、jre、lib三个文件夹了,
bin:该路径下存放了JDK的各种工具命令,常用的有javac、java等;
jre:该路径下安装的就是运行java程序所必须的JRE环境;
lib:该路径下存放的是JDK工具 命令的实际执行代码程序,该文件夹下的dt.jar 和tools.jar是工具命令的类文件(.class);
下面我们就来讲一下PATH和CLASSPATH这两个系统变量:
首先编译和运行java程序需要两步骤:
1、将.java源文件编译成.class字节码;
2、解释执行与平台无关的字节码程序;
这两步分别用到javac 和java这两个命令。
当我们运行这两个命令的时候,计算机是如何找到这两个命令的呢?也就是如何找到这两个命令的路径的?所以我们就要为这样的工具命令设置路径,让计算机能够自己找到他们。windows操作系统都是根据系统变量PATH来查找命令的,所以我们就将工具命令(bin目录)的路径加到path路径上面,计算机就能找到了(将D:\Java\jdk1.8.0_102\bin加入到path环境变量中):
环境变量中不同路径之间用分号隔开,Linux下面用冒号隔开。
这样的话在dos环境里面运行java、javac等工具命令时,计算机就能自动找到命令所在路径并执行了。
接下来计算机根据path里面的路径找到命令了,但是这个路径(也就是bin目录)存放的是工具命令的一个引用,具体的工具命令程序是保存在lib目录下的,所以这个时候计算机单单找到工具命令还不行,还要找到它的执行体,而这个执行体都是一些java的经过编译后的.class文件(lib目录下的dt.jar和tools.jar),所以我们要设置一个环境变量,将这两个文件(即类包dt.jar和tools.jar)路径放到 环境变量中,以便于计算机能找到执行。
而对于类文件(jar包文件),java设置了一个系统变量CLASSPATH(设置成环境变量windows7 64位设置无效)专门来指向类文件,计算机根据这个环境变量下面的路径,就能找到相对应的类文件并执行了。所以jdk安装后,要把D:\Java\jdk1.8.0_102\lib\dt.jar;D:\Java\jdk1.8.0_102\lib\tools.jar两个路径加入到CLASSPATH中。
而我们通常设置的CLASSPATH路径前面还有一个点,即完整的CLASSPATH是.;D:\Java\jdk1.8.0_102\lib\dt.jar;D:\Java\jdk1.8.0_102\lib\tools.jar(也可以直接写成D:\Java\jdk1.8.0_102\lib)
这个点是用来干什么的呢?(假设有一个已经编译好了的java文件Hello.class)
我们执行这个文件 java Hello 这个时候JRE是到哪里搜索这个文件呢?可能有人说当前路径下搜索啊!这是对的,是在当前路径下搜索,但是JDK1.4及之前的版本没有设计这个功能,这意味着即使当前路径包含着Hello.class这个文件,在执行 java Hello 这个命令时,系统也找不到Hello这个类。
所以在JDK1.4及之前的版本中需要在ClassPATH环境变量中添加一个点(.),用来告诉JRE需要在当前路径下搜索JAVA类。所以CLASSPATH也就有了上面的路径 (.;D:\Java\jdk1.8.0_102\lib\dt.jar;D:\Java\jdk1.8.0_102\lib\tools.jar)。
总之,CLASSPATH这个环境变量就是用来寻找类的。把相应的类路径添加进去,系统就能自动检索到并执行。
在JDK1.5及之后发布的版本中,可以不用设置CLASSPATH这个环境变量了,因为JRE比以前更智能了,它会自动搜索当前路径下的类文件,而且在使用java的编译和运行工具时,系统也可以自动加载dt.jar和tools.jar文件中的java类,因此不再需要设置CLASSPATH环境变量。
但是当我们使用JDK1.5及之后发布的版本时,如果设置了CLASSPATH这个环境变量,JRE将会按照CLASSPATH环境变量指定的路径来搜索java类,而不会自动寻找java类的,所以要自己设置CLASSPATH的话,一定要设置正确,不然运行不了!
第二部分:
一、JDK与JRE
如果你希望进行Java开发,那么第一件事就是搭建Java环境,Java环境可以分为开发环境和运行环境。
开发环境: JDK,对应javac命令
运行环境: JRE,对应java命令
具体而言:
JDK(Java Development Kit)指的是Java开发工具集。JDK是整个Java的核心,包括了Java基础类库、Java运行环境(JRE)和Java开发工具。是做Java开发必须要安装的。
JRE(Java Runtime Environment)指的是Java运行时环境。Java程序运行时必需要JRE的支持。如果系统只安装JRE的话,则意味着系统可以跑任何Java程序,但不能做Java开发。
所以如果你只是要能够跑java程序的话,只需要安装JRE即可,如果你希望开发java程序,则需要安装JDk,需要注意的是JDK中已经包括了JRE。
现在假设你已经在Windows上安装好了JDK,可以用记事本编写经典的Hello World!代码:
HelloWorld.java文件
public class HelloWorld {
public static void main(String[] args){
System.out.println("hello world!");
}
}
注意:因为申明了是公共类,所以文件名必须和类名一致
首先进入文件所在位置,然后javac HelloWorld.java,这个过程称之为编译,此时会在当前目录下生成HelloWorld.class文件,这就体现了开发环境。
之后java HelloWorld ,此时控制台便会出现”hello world!”字样,这就体现了运行环境。
需要注意此时不可加文件后缀,因为java命令 并不是运行文件而是运行这个类。
如果加了后缀就会报如下错误:
二、JAVA环境配置
1.官网下载JDK
http://www.oracle.com/technetwork/java/javase/downloads/index.html
2.直接点击安装,地址可以自行修改
3.配置环境变量
①进入系统-高级系统设置-环境变量
②新建系统变量JAVA_HOME
填入Java的安装路径,如:D:\Java\jdk9
③新建系统变量CLASSPATH
填入:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
或者:.;%JAVA_HOME%\lib;
CLASSPATH的作用是什么呢?
我们知道Java虚拟机JVM负责执行Java的类文件,而JVM是如何找到需要执行的class文件呢?这就需要classpath这个环境变量了,JVM会优先去classpath中所记录的路径去按顺序查找目标class文件。如果没有设置classpath这个环境变量,则JVM只会在当前目录下进行查找。
classpath的设置中,如果设置完路径后,其末尾没有带有分号(;),则表示JVM仅仅只去指定的目录查找类文件,如果找不到,也不会在当前所在目录查找;如果带有分号作结尾,则表示会先去指定目录下查找,若找不到,则会在当前目录下重新查找;而设置中的点号(.),就代表当前目录;
④编辑系统变量Path
填入:%JAVA_HOME%\bin;
一般情况下如果我们需要执行某个exe程序,需要先进到程序所在路径,而如果你讲这个路径配置到Path变量中,就可在任何地方通过Dos执行,bin下的javac.exe也是如此。