一、Linux 环境安装JDK
1、下载
根据实际需求,在 Oracle 官网 上下载某版本JDK(如 jdk-8u341-linux-x64.tar.gz),再通过文件传输工具(如 Finalshell、FileZilla 等)丢到服务器上。
2、安装
# 查看是否安装open JDK
[root&localhost /]# rpm -qa|grep jdk
# 如果有 --> 卸载
[root&localhost /]# yum -y remove xxxx
# 创建文件夹
[appuser&localhost /]$ mkdir -p /app/java
# 解压
[appuser&localhost /]$ tar -zxvf jdk-8u341-linux-x64.tar.gz /app/java
# 配置JDK环境变量
[appuser&localhost /]$ vi /etc/profile
export JAVA_HOME=/app/jdk1.8.0_341
export CLASSPATH=$JAVA_HOME/lib/
export PATH=$PATH:$JAVA_HOME/bin
# 刷新配置环境使其生效
[appuser&localhost /]$ source /etc/profile
# 验证
[appuser&localhost /]$ java -version
[appuser&localhost /]$ echo $PATH
二、Windows 环境安装JDK
1、下载
根据实际需求,在 Oracle 官网 上下载某版本JDK(如 jdk-8u281-windows-x64.exe)。
2、安装
双击下载的 jdk-8u281-windows-x64.exe
,选择安装路径(尽量安装在固态硬盘),之后一路下一步
3、配置环境变量
- 第一步,右键 “此电脑/计算机”,点击 “属性”,点击 “高级系统设置”,点击 “环境变量”
- 第二步, 新建 JAVA_HOME 变量:在系统变量中,点击 “新建”
- 第三步,选择性配置 CLASSPATH 变量:在系统变量中,点击 “新建”
- 第四步,编辑Path变量,将“%JAVA_HOME%\bin”和“%JAVA_HOME%\jre\bin”加入Path的变量值中
注意:每次编辑完“环境变量”,都要点击“确定”加以保存,否则配置无效
4、测试
点击 win+r,输入 cmd
打开命令行窗口,输入 java -version
三、Mac 环境安装JDK
1、下载
根据实际需求,在 Oracle 官网 上下载某版本JDK(如 M芯片- jdk-8u421-macosx-aarch64.dmg 、 Intel芯片- jdk-8u421-macosx-x64.dmg)。
2、安装
双击下载的 dmg
文件,双击 pkg
文件,点击继续
,点击安装
,输入密码,点击 关闭
3、配置环境变量
# 打开配置文件,输入以下三行配置信息
zhangsan@Mac ~ % vi ~/.zshrc
JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_361.jdk/Contents/Home
CLASS_PATH="$JAVA_HOME/lib"
PATH="$PATH:$JAVA_HOME/bin"
# 使配置生效
zhangsan@Mac ~ % source ~/.zshrc
四、多版本配置切换
# JDK Config
JAVA_HOME_8=/Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home
JAVA_HOME_11=/Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home
JAVA_HOME_17=/Library/Java/JavaVirtualMachines/jdk-17.0.2.jdk/Contents/Home
export JAVA_HOME=$JAVA_HOME_8
alias jdk8="export JAVA_HOME=$JAVA_HOME_8 && echo current JDK has switched to oracle jdk version 1.8. && java -version"
alias jdk11="export JAVA_HOME=$JAVA_HOME_11 && echo current JDK has switched to openjdk version 11. && java -version"
alias jdk17="export JAVA_HOME=$JAVA_HOME_17 && echo current JDK has switched to openjdk version 17. && java -version"
CLASS_PATH="$JAVA_HOME/lib"
PATH="$PATH:$JAVA_HOME/bin"
多版本切换:
xxx@xxxdeMacBook-Air ~ % jdk8
current JDK has switched to oracle jdk version 1.8.
java version "1.8.0_391"
Java(TM) SE Runtime Environment (build 1.8.0_391-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.391-b13, mixed mode)
xxx@xxxdeMacBook-Air ~ % java -version
java version "1.8.0_391"
Java(TM) SE Runtime Environment (build 1.8.0_391-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.391-b13, mixed mode)
xxx@xxxdeMacBook-Air ~ % jdk11
current JDK has switched to openjdk version 11.
java version "11.0.21" 2023-10-17 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.21+9-LTS-193)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.21+9-LTS-193, mixed mode)
xxx@xxxdeMacBook-Air ~ % java -version
java version "11.0.21" 2023-10-17 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.21+9-LTS-193)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.21+9-LTS-193, mixed mode)
五、JDK为何要配Path和ClassPath?
1、JDK运行原理
一个xxx.java文件要想被运行,首先要被javac.exe编译生成字节码文件 ----> xxx.class文件
然后JDK中的Java命令运行此xxx.class文件,java代码就可以被执行。
2、为什么要配置Path
平时使用cmd运行JDK中的命令时,只能在JDK的安装目录下运行如 javac和java命令。但是一旦脱离了当前安装目录,对于编写的java文件就没办法继续执行,会提示没有此命令。所以要想在任何目录下都能运行JDK命令,就需要在path中配置JDK的安装路径。这样,在cmd中运行java命令时,会先从当前目录进行查找,如果查找不到此命令的执行程序,便会到path路径查找,path中配置了JDK的安装路径,所以此时在任何目录下都能编译执行Java文件。
3、为什么要配置ClassPath
F:\workspace 目录下Java程序不能在 F:根目录执行,因为F盘根目录压根没有此java程序源码,调用javac和java无法执行。ClassPath的作用就是配置好一个java程序存放路径。当在其他任何目录下执行一个当前目录没有的java程序时,会优先去ClassPath配置的路径中进行查找,如果没有再到当前目录下查找。
jdk1.5以后一般都不配置ClassPah
特别注意:配置方式上有所不同,如果单纯的配置一个路径结尾没有 ;.
,那么只会去ClassPath配置的路径下查找,找不到就会提示文件不存在。配置了 ;.
才会在配置路径找不到文件的情况下再去当前目录查找。
六、JDK、JRE、JVM
1、定义
- JVM(Java Vitrual Machine,Java虚拟机):JVM就是一个虚拟的用于执行bytecode字节码的“虚拟计算机”
- JRE(Java Runtime Environment)是 Java 的运行环境。面向 Java 程序的使用者,而不是开发者。如果你仅下载并安装了 JRE,那么你的系统只能运行 Java 程序。JRE 是运行 Java 程序所必须环境的集合,包含 JVM 标准实现及 Java 核心类库。它包括 Java 虚拟机、Java 平台核心类和支持文件。它不包含开发工具(编译器、调试器等)。
- JDK(Java Development Kit))又称 J2SDK(Java2 Software Development Kit),是 Java 开发工具包,它提供了 Java 的开发环境(提供了编译器 javac 等工具,用于将 java 文件编译为 class 文件)和运行环境(提 供了 JVM 和 Runtime 辅助包,用于解析 class 文件使其得到运行),面向Java程序的开发者。如果你下载并安装了 JDK,那么你不仅可以开发 Java 程序,也同时拥有了运行 Java 程序的平台。JDK 是整个 Java 的核心,包括了 Java 运行环境(JRE),一堆 Java工具
tools.jar
和 Java 标准类库 (rt.jar
)
即:JDK包含JRE,JRE包含JVM
2、两套 JRE
安装JDK时一定会在其子目录下面安装一个JRE,同时在安装的过程也会询问你是否要安装一 个外部的JRE,如果我们选择安装则就同时拥有了两个JRE。
安装 JDK的时候会在其子目录下安装一个 JRE,同时在安装的过程也会询问是否要安装一个外部的公共 JRE。如果选择安装则就同时拥有了两个 JRE,一套一般在c:\program files\Java\jre
下,一套自己选择的JDK安装路径下,如:D:\program files\Java\jdk1.8\jre
。前面那套少了Server端的Java虚拟机(jdk1.8.0_281/jre/bin
多了个server文件夹)。
《疯狂Java》:公共JRE是一个独立的JRE系统,会单独安装在系统的其他路径下。公共JRE会向IE浏览器和系统中注册JAVA运行时环境。通过这种方式,系统中任何应用程序都可以使用公共JRE。由于现在在网页上执行Applet的机会越来越少,而且完全可以使用JDK目录下的JRE来运行JAVA程序,因此没有太大必要安装公共JRE
这两个 JRE本质上并没有任何区别,最主要的区别在于:
- JDK目录里面的 JRE主要是设计用来运行JDK自带的那些工具的(Bin目录下),包括
javac.exe
。这些开发工具可以理解为包装器Wrapper(/lib/tools.jar
),制作的目的是为了让开发者免于输入太长的指命,比如:javac.exe
与输入java -cp c:/jdk/lib/tools.jar com.sun.tools.javac.Main
是一样的,会得到相同的结果。/lib
目录下的程序都很小,不大于29K
,JDK里的工具几乎是用Java所编写,所以也是Java应用程序,因此要使用JDK所附的工具来开发Java程序,也必须要自行附一套JRE才行,所以位于JDK目录下的那套JRE就是用来运行一般Java程序的。 - 外部的 JRE在安装的时候会自动注册到操作系统的path里面,一般在
System32
文件夹下可以看到java.exe
、javaw.exe
、javaws.exe
三个文件。jdk 1.8版本,安装时候会注册到环境变量中,在我的电脑\属性\高级系统设置\环境变量\系统变量
中的 path中有个C:\ProgramData\Oracle\Java\javapath
路径值生成,卸载jdk该值依然存在,卸载jre该值自动消失。
因此我们只要安装了外部的JRE(即使JDK没有安装,环境变量没有配置)则运行Java程序时都是用的外部JRE的java.exe
程序来运行的(即使安装了JDK且配置了环境变量)(系统的默认path具有优先)。
验证我们用到的java命令是jre/bin
目录下的方法:把jdk/bin
目录下的java.exe
剪切到别的地方再运行java程序(或者卸载jdk),可以发现程序正常运行。
java.exe 决定使用哪套JRE
在我们的电脑里面至少有两套JRE(如果安装了Borland JBuilder
等高级开发工具,电脑里面会有更多套的JRE),由java.exe
来决定使用哪一套JRE
当我们在命令行输入:java xxx
的时候,java.exe
的任务就是在我们电脑上众多的JRE中找到合适的JRE来执行xxx
。java.exe
依据以下顺序来寻找JRE:
- 自己的目录下有没有JRE目录;
- 父目录下有没有JRE目录;
- 查询注册表
HKEY_LOCAL_MACHINE\Software\JavaSoft\Java Runtime Environment\
java.exe
的执行结果与我们电脑里哪一个java.exe
搜索一下就会发现我们电脑里面也不止一个java.exe
)被执行以及哪套JRE来执行java程序有很大的关系。
另外,java.exe
在找到合适的JRE以后,还有一个验证版本的程序,也就是java.exe
与JRE的版本一致才可以执行。如果出现版本不一致的问题,一定要记得两件事情:
- 哪一个
java.exe
被执行 java.exe
找到哪一套JRE
只要这两件事情确定了,我们就抓住了问题的来龙去脉,解决起来也就轻而易举了。
3、环境变量的配置
没有配置环境变量的时候,在jdk/bin
路径下,终端可以正常执行javac命令,切换到别的路径,则报错:“不是内部或外部命令”。
似乎使用集成开发环境如idea或eclipse等开发并编译Java程序,而不使用命令行javac的方式来编译Java程序,那么就可以不配置jdk的环境变量了?
4、JVM
JVM(JAVA Virtual Machine,JAVA虚拟机)是JRE的一部分,JRE是JVM的补充。那么JVM到底在哪里呢?
我们打开jdk1.8.0——\jre\bin
,会看到client和server两个目录,在这两个目录中分别可以看到jvm.dll
,这就 是我们所说的JVM之所在。
jdk/jre/bin
下有两个目录:server与client,这就是真正的jvm.dll
所在。 jvm.dll
无法单独工作,当jvm.dll
启动后,会使用explicit的方法(就是使用Win32 API
之中的LoadLibrary()
与GetProcAddress()
来载入辅助用的动态链接库),而这些辅助用的动态链接库(.dll
)都必须位于jvm.dll
所在目录的父目录之中。因此想使用哪个JVM,只需要设置PATH,指向JRE所在目录底下的jvm.dll
最主流的JDK是Sun公司发布的JDK,除了Sun之外,还有很多公司和组织都开发了自己的JDK,例如IBM公司开发的JDK,BEA公司的Jrocket,还有GNU组织开发的JDK等等。
5、jdk目录说明
-
bin文件里面存放了JDK的各种开发工具的可执行文件,主要的是编译器(javac.exe)
-
db文件是一个先进的全事务处理的基于Java技术的数据库(jdk自带数据库db的使用)
-
include文件里面是Java和jvm交互用的头文件
-
jre为java运行环境
-
lib文件存放的是JDK工具命令的实际执行程序
十、资料
- 2024年最新MacBook苹果电脑安装JDK8、JDK11、JDK17、JDK22教程,配置环境变量 + 快速切换JDK版本