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 进行下载
关于环境变量(Environment Variable)
变量
就是可以随意给其赋值的一个存储单元。
环境
如果把操作系统当做是一个最大的软件,其它软件如Office、JVM、LOL等等都是运行在这个软件之内的小软件。那么,相对于这些小软件来说,它们所处的「环境」就是操作系统这个软件。
合起来就是“环境中的变量”
「环境变量」就是操作系统这个软件中的变量,即:操作系统提供给你的全局变量!
环境变量的作用
环境变量在任何程序中的作用都是“被赋值/被取值”!这个全局变量操作系统可以使用,其内的小软件也可以使用!
Java中的环境变量
环境变量大体上是给操作系统的直接上层程序用的。比如Linux中的
shell
、.sh
文件;Windows中的cmd
、.bat
文件。
常见的Java相关环境变量及其作用
PATH
PATH
是操作系统用的,用来指定操作系统需要使用到的可执行程序的位置。对于Java来说,通常需要把 JDK 的 bin 目录添加进入
PATH
中,这样你就可以在任意目录下使用 bin 下面的可执行程序,如javac.exe
、java.exe
等。这个变量一定要保证将 JRE/JDK 的 bin 纳入其中(这里我说的其实不严谨,你可以把
javaw.exe
等这类文件复制一份放到任意一个PATH
路径下,不一定是JRE/JDK也行),这样很多Java程序才能启动,比如Eclipse
。JAVA_HOME
JAVA_HOME
是一个约定,通常它指的是JDK的目录。如果需要JDK的话,大部分程序会默认去环境变量中取JAVA_HOME
这个变量。例如,Tomcat的
.bat/.sh
文件中就会默认去取JAVA_HOME
来用。所以,这个变量最需要设置。设置它,可保你万无一失,一生平安……
JRE_HOME
同样,这也是一个约定的变量,通常指JRE目录。其实大部分Java程序不需要JDK,而是只需要其子集JRE,所以很多程序也会去取这个变量来用。
例如,Tomcat中某些
.bat
文件中这样说到:1
2
3
4
5
6rem 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,且最好就用这个。
CLASSPATH
CLASSPATH
是约定的一个可以设置我们自己的.class, jar
文件所在目录的变量。不过某个Java程序可以自己决定取与不取这个变量。Tomcat 在某些情况下会去取,你自己的 Java 程序你不设置就会忽略它的。这和Java可执行程序:
java.exe
的可选配置-cp/-classpath
不是一个东西,仅是用意相似:1
2
3
4
5
6
7
8
9java [-options] class [args...]
(执行类)
或 java [-options] -jar jarfile [args...]
(执行 jar 文件)
其中选项包括:
-cp <目录和 zip/jar 文件的类搜索路径>
-classpath <目录和 zip/jar 文件的类搜索路径>
用 : 分隔的目录, JAR 档案
和 ZIP 档案列表, 用于搜索类文件。123456789结论:基本上,你不需要它。
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能获取环境变量:
获取并打印
1
2
3
4
5
6
7
8
9
10// 打印单个环境变量
final String env = System.getenv("PATH");
System.out.println(env);
// 打印所有环境变量
final Map<String, String> envMap = System.getenv();
for (Map.Entry<String, String> env : envMap.entrySet()) {
System.out.println(env.getKey() + "=" + env.getValue());
}
123456789
最后我们总结一下:
需要在操作系统下设置的变量:
PATH
中包含JRE/JDK的bin
目录。JAVA_HOME
或者JRE_HOME
。都设也可以,偷懒就只设JAVA_HOME
就可以。
很少需要设置的:
CLASSPATH
、CATALINA_HOME
。
window 下 JDK 环境变量的设置
- 安装完成后,右击”我的电脑”,点击”属性”,选择”高级系统设置”;
- 选择”高级”选项卡,点击”环境变量”;
- 然后就会出现如下图所示的画面:
在 “系统变量” 中设置 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;
JAVA_HOME 设置
PATH设置
注意:在 Windows10 中,Path 变量里是分条显示的,我们需要将 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; 分开添加,否则无法识别:
1
2 %JAVA_HOME%\bin;
%JAVA_HOME%\jre\bin;
更多内容可参考:Windows 10 配置Java 环境变量
CLASSPATH 设置
这是 Java 的环境配置,配置完成后,你可以启动 Eclipse 来编写代码,它会自动完成java环境的配置。
测试JDK是否安装成功
1、”开始”->”运行”,键入”cmd”;
2、键入命令: java -version、java、javac 几个命令,出现以下信息,说明环境变量配置成功;
MACOS 下设置 JDK 环境变量
打开终端,输入:
1
open -e .bash_profile
设置一个
JAVA_HOME
的环境变量,它指向JDK的安装目录。在打开的 .bash_profile 中添加:1
export JAVA_HOME=`/Library/Java/JavaVirtualMachines/jdk-15.0.2.jdk/Contents/Home`
注意:在 Mac 上,JDK 的路径和 window 上不同
设置
PATH
环境变量,把JAVA_HOME
的bin
目录附加到系统环境变量PATH
上。在打开的 .bash_profile 中添加:1
export PATH=$JAVA_HOME/bin:$PATH
把
JAVA_HOME
的bin
目录添加到PATH
中是为了在任意文件夹下都可以运行java
。最后,保存 .bash_profile 文件,在终端输入:
1
source .bash_profile
打开终端,输入命令
java -version
,如果一切正常,你会看到如下输出:
最后
细心的童鞋还可以在JAVA_HOME
的bin
目录下找到很多可执行文件:
- java:这个可执行程序其实就是JVM,运行Java程序,就是启动JVM,然后让JVM执行指定的编译后的代码;
- javac:这是Java的编译器,它用于把Java源码文件(以
.java
后缀结尾)编译为Java字节码文件(以.class
后缀结尾); - jar:用于把一组
.class
文件打包成一个.jar
文件,便于发布; - javadoc:用于从Java源码中自动提取注释并生成文档;
- jdb:Java调试器,用于开发阶段的运行调试。