JDK简介

JDK —— Java Development ToolKit (Java 开发工具包)。JDK 是整个 Java 的核心,包括了 Java 运行环境(Java Runtime Envirnment),一堆 Java 工具( javac/java/jdb 等)和 Java 基础的类库(即 Java API 包括 rt.jar)。
最主流的 JDK 是Sun公司发布的 JDK,除了 Sun 之外,还有很多公司和组织都开发了属于自己的 JDK,例如国外 IBM 公司开发了属于自己的 JDK,国内淘宝也开发了属于自己的 JDK,各个组织开发自己的 JDK 都是为了在某些方面得到一些提高,以适应自己的需求,比如 IBM 的 JDK 据说运行效率就比 SUN 的 JDK 高的多。但不管怎么说,我们还是需要先把基础的 Sun JDK 掌握好。

JDK 是 Java 开发工具包,在其安装目录下面有六个文件夹、一些描述文件、一个 src 压缩文件。bin、include、lib、 jre 这四个文件夹起作用,demo、sample 是一些例子。可以看出来 JDK 包含 JRE,而 JRE 包含 JVM。

  • bin:最主要的是编译器(javac.exe)
  • include:java 和 JVM 交互用的头文件
  • lib:类库
  • jre:java运行环境(注意:这里的 bin、lib 文件夹和 jre 里的 bin、lib 是不同的)

总的来说 JDK 是用于 Java 程序的开发,而 jre 则是只能运行 class 而没有编译的功能。

JDK 是提供给 Java 开发人员使用的,其中包含了 Java 的开发工具,也包括了 JRE。所以安装了 JDK,就不用在单独安装 JRE了。 其中的开发工具包括编译工具 ( javac.exe ) 打包工具 ( jar.exe ) 等

在 JDK 的安装目录下有一个 jre 目录,里面有两个文件夹 bin 和 lib,在这里可以认为 bin 里的就是 jvm,lib 中则是 jvm 工作所需要的类库,而 jvm 和 lib 合起来就称为 jre。

JDK的安装

访问 Oracle官网,找到最新版本的 JDK 进行下载

JDK安装说明 - 图1

关于环境变量(Environment Variable

  • 变量
    就是可以随意给其赋值的一个存储单元。
  • 环境
    如果把操作系统当做是一个最大的软件,其它软件如Office、JVM、LOL等等都是运行在这个软件之内的小软件。那么,相对于这些小软件来说,它们所处的「环境」就是操作系统这个软件。
  • 合起来就是“环境中的变量”
    「环境变量」就是操作系统这个软件中的变量,即:操作系统提供给你的全局变量
  • 环境变量的作用
    环境变量在任何程序中的作用都是“被赋值/被取值”!这个全局变量操作系统可以使用,其内的小软件也可以使用!

Java中的环境变量

环境变量大体上是给操作系统的直接上层程序用的。比如Linux中的shell.sh文件;Windows中的cmd.bat文件。

常见的Java相关环境变量及其作用

  1. PATH
    PATH是操作系统用的,用来指定操作系统需要使用到的可执行程序的位置。
    对于Java来说,通常需要把 JDK 的 bin 目录添加进入PATH中,这样你就可以在任意目录下使用 bin 下面的可执行程序,如javac.exejava.exe等。
    这个变量一定要保证将 JRE/JDK 的 bin 纳入其中(这里我说的其实不严谨,你可以把javaw.exe等这类文件复制一份放到任意一个PATH路径下,不一定是JRE/JDK也行),这样很多Java程序才能启动,比如Eclipse
  2. JAVA_HOME
    JAVA_HOME是一个约定,通常它指的是JDK的目录。如果需要JDK的话,大部分程序会默认去环境变量中取JAVA_HOME这个变量。> 例如,Tomcat的.bat/.sh文件中就会默认去取JAVA_HOME来用。


所以,这个变量最需要设置。设置它,可保你万无一失,一生平安……

  1. JRE_HOME
    同样,这也是一个约定的变量,通常指JRE目录。其实大部分Java程序不需要JDK,而是只需要其子集JRE,所以很多程序也会去取这个变量来用。
    例如,Tomcat中某些.bat文件中这样说到:bat rem JAVA_HOME Must point at your Java Development Kit installation. rem Using JRE_HOME instead works as well. rem rem JRE_HOME Must point at your Java Runtime installation. rem Defaults to JAVA_HOME if empty. If JRE_HOME and JAVA_HOME rem are both set, JRE_HOME is used.123456
    大意是说:Tomcat去取这俩变量,只要任意一个不为空就行,都不为空就用JRE_HOME了。因为Tomcat不需要JDK中的工具,它只是运行Java程序而已。
    这个变量如果你明确知道应用程序只需要设置这个就行(比如上面Tomcat的注释),那么它可以代替JAVA_HOME,且最好就用这个。
  2. CLASSPATH
    CLASSPATH是约定的一个可以设置我们自己的.class, jar文件所在目录的变量。不过某个Java程序可以自己决定取与不取这个变量。Tomcat 在某些情况下会去取,你自己的 Java 程序你不设置就会忽略它的。
    这和Java可执行程序:java.exe的可选配置-cp/-classpath不是一个东西,仅是用意相似:```log java [-options] class [args…]
    1. (执行类)
    或 java [-options] -jar jarfile [args…]
    (执行 jar 文件)
    
    其中选项包括: -cp <目录和 zip/jar 文件的类搜索路径> -classpath <目录和 zip/jar 文件的类搜索路径>
           用 : 分隔的目录, JAR 档案
           和 ZIP 档案列表, 用于搜索类文件。123456789
    
    ```
    结论:基本上,你不需要它。
  3. CATALINA_HOME
    这是Tomcat用的。叫CATALINA这个名字我估计是因为Tomcat默认服务(也就<Service></Service>标签)的名字就是CATALINA。当然,是不是其实不重要,毕竟变量的名字可以随意起(但最好见名知意),重要的是它存什么值。它的值代表当前tomat根目录,比如:E:\apache-tomcat-7.0.55
    这个变量,仅当你移动了.bat/.sh等用来启动Tomcat的文件(就是不在原来的tomcat\bin下面了)时才需要指定。比如,在Linux中你将catalina.sh复制到/etc/rc.d/init.d/下做自启动服务时就需要设置一下。

Java代码中也有API能获取环境变量:

  • 获取并打印```java // 打印单个环境变量 final String env = System.getenv(“PATH”); System.out.println(env);

// 打印所有环境变量 final Map envMap = System.getenv(); for (Map.Entry env : envMap.entrySet()) { System.out.println(env.getKey() + “=” + env.getValue()); } 123456789



最后我们总结一下:

1. **需要**在操作系统下设置的变量:
   1. `PATH`中包含JRE/JDK的`bin`目录。
   2. `JAVA_HOME`或者`JRE_HOME`。都设也可以,偷懒就只设 `JAVA_HOME`就可以。
2. **很少**需要设置的:<br />`CLASSPATH`、`CATALINA_HOME`。

<a name="39532f43"></a>
## window 下 JDK 环境变量的设置

1. 安装完成后,右击"我的电脑",点击"属性",选择"高级系统设置";

![](https://gitee.com/yinyiwang/blogImages/raw/master/images/20210301%20/20-11-10-Jpnbtp.png#align=left&display=inline&height=288&margin=%5Bobject%20Object%5D&originHeight=288&originWidth=641&status=done&style=none&width=641)

2. 选择"高级"选项卡,点击"环境变量";

![](https://gitee.com/yinyiwang/blogImages/raw/master/images/20210301%20/20-11-13-0ySx99.png#align=left&display=inline&height=442&margin=%5Bobject%20Object%5D&originHeight=442&originWidth=418&status=done&style=none&width=418)

3. 然后就会出现如下图所示的画面:

![](https://gitee.com/yinyiwang/blogImages/raw/master/images/20210301%20/20-11-19-T61m05.png#align=left&display=inline&height=408&margin=%5Bobject%20Object%5D&originHeight=408&originWidth=396&status=done&style=none&width=396)

在 "系统变量" 中设置 3 项属性,JAVA_HOME、PATH、CLASSPATH (大小写无所谓),若已存在则点击"编辑",不存在则点击"新建"。
> **注意:**如果使用 1.5 以上版本的 JDK,不用设置 CLASSPATH 环境变量,也可以正常编译和运行 Java 程序。

变量设置参数如下:

- 变量名:**JAVA_HOME**
- 变量值:**C:\Program Files (x86)\Java\jdk1.8.0_91**     // 要根据自己的实际路径配置
- 变量名:**CLASSPATH**
- 变量值:**.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;**     //记得前面有个"."
- 变量名:**Path**
- 变量值:**%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;**

<a name="2f72cd64"></a>
#### JAVA_HOME 设置

![](https://gitee.com/yinyiwang/blogImages/raw/master/images/20210301%20/20-11-26-ldAxvZ.png#align=left&display=inline&height=145&margin=%5Bobject%20Object%5D&originHeight=145&originWidth=359&status=done&style=none&width=359)

![](https://gitee.com/yinyiwang/blogImages/raw/master/images/20210301%20/20-11-32-DkpB9w.png#align=left&display=inline&height=406&margin=%5Bobject%20Object%5D&originHeight=406&originWidth=394&status=done&style=none&width=394)

<a name="ab665574"></a>
#### PATH设置

![](https://gitee.com/yinyiwang/blogImages/raw/master/images/20210301%20/20-11-38-bGLZmu.png#align=left&display=inline&height=146&margin=%5Bobject%20Object%5D&originHeight=146&originWidth=355&status=done&style=none&width=355)

![](https://gitee.com/yinyiwang/blogImages/raw/master/images/20210301%20/20-11-42-BegabF.png#align=left&display=inline&height=407&margin=%5Bobject%20Object%5D&originHeight=407&originWidth=395&status=done&style=none&width=395)

> **注意:**在 Windows10 中,Path 变量里是分条显示的,我们需要将 **%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;** 分开添加,否则无法识别:
>

%JAVA_HOME%\bin; %JAVA_HOME%\jre\bin;

> ![](https://gitee.com/yinyiwang/blogImages/raw/master/images/20210301%20/20-11-46-yZ0XlB.png#align=left&display=inline&height=185&margin=%5Bobject%20Object%5D&originHeight=185&originWidth=525&status=done&style=none&width=525)
> 更多内容可参考:[Windows 10 配置Java 环境变量](https://www.runoob.com/w3cnote/windows10-java-setup.html)


<a name="d8827294"></a>
#### CLASSPATH 设置

![](https://gitee.com/yinyiwang/blogImages/raw/master/images/20210301%20/20-11-51-dipATw.png#align=left&display=inline&height=146&margin=%5Bobject%20Object%5D&originHeight=146&originWidth=356&status=done&style=none&width=356)

这是 Java 的环境配置,配置完成后,你可以启动 Eclipse 来编写代码,它会自动完成java环境的配置。

<a name="ad3fde80"></a>
#### 测试JDK是否安装成功

1、"开始"->"运行",键入"cmd";

2、键入命令: **java -version**、**java**、**javac** 几个命令,出现以下信息,说明环境变量配置成功;

![](https://gitee.com/yinyiwang/blogImages/raw/master/images/20210301%20/20-11-55-f9iw18.png#align=left&display=inline&height=80&margin=%5Bobject%20Object%5D&originHeight=80&originWidth=648&status=done&style=none&width=648)

<a name="ca3d014f"></a>
## MACOS 下设置 JDK 环境变量

1. 打开终端,输入:```bash
open -e .bash_profile
  1. 设置一个JAVA_HOME的环境变量,它指向JDK的安装目录。在打开的 .bash_profile 中添加:bash export JAVA_HOME=`/Library/Java/JavaVirtualMachines/jdk-15.0.2.jdk/Contents/Home`

    注意:在 Mac 上,JDK 的路径和 window 上不同

  1. 设置 PATH 环境变量,把JAVA_HOMEbin目录附加到系统环境变量PATH上。在打开的 .bash_profile 中添加:bash export PATH=$JAVA_HOME/bin:$PATH
    JAVA_HOMEbin目录添加到PATH中是为了在任意文件夹下都可以运行java
  2. 最后,保存 .bash_profile 文件,在终端输入:bash source .bash_profile
    打开终端,输入命令java -version,如果一切正常,你会看到如下输出:
    JDK安装说明 - 图2

最后

细心的童鞋还可以在JAVA_HOMEbin目录下找到很多可执行文件:
JDK安装说明 - 图3

  • java:这个可执行程序其实就是JVM,运行Java程序,就是启动JVM,然后让JVM执行指定的编译后的代码;
  • javac:这是Java的编译器,它用于把Java源码文件(以.java后缀结尾)编译为Java字节码文件(以.class后缀结尾);
  • jar:用于把一组.class文件打包成一个.jar文件,便于发布;
  • javadoc:用于从Java源码中自动提取注释并生成文档;
  • jdb:Java调试器,用于开发阶段的运行调试。