当前位置: 首页 > news >正文

【Java】Linux、Mac、Windows 安装 Oracle JDK

一、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

3、多版本切换

# 添加JDK版本
[appuser&localhost /]$ sudo alternatives --install /usr/local/jdk jdk /app/jdk1.8.0_421 8
[appuser&localhost /]$ sudo alternatives --install /usr/local/jdk jdk /app/jdk-23 23# 环境变量配置
[appuser&localhost /]$ vi ~/.bash_profile
export JAVA_HOME=/usr/local/jdk
export CLASS_PATH="$JAVA_HOME/lib"
export PATH="$PATH:$JAVA_HOME/bin"# 使配置生效
[appuser&localhost /]$ source ~/.bash_profile# 查看JDK版本
[appuser@localhost app]$ java -version
java version "23" 2024-09-17
Java(TM) SE Runtime Environment (build 23+37-2369)
Java HotSpot(TM) 64-Bit Server VM (build 23+37-2369, mixed mode, sharing)# 切换JDK版本,目前有两个版本,要用哪个输入对应的编号再回车即可
[appuser@localhost app]$ sudo alternatives --config jdk共有 2 个提供“jdk”的程序。选项    命令
-----------------------------------------------1           /app/jdk1.8.0_421
*+ 2           /app/jdk-23按 Enter 保留当前选项[+],或者键入选项编号:1# 查看JDK版本
[appuser@localhost app]$ java -version
java version "1.8.0_421"
Java(TM) SE Runtime Environment (build 1.8.0_421-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.421-b09, mixed mode)

sudo 报错:appuser 不在 sudoers 文件中。此事将被报告。
解决方案:

# 切换 root 用户
[appuser&localhost /]$ su root 
密码:
[root@localhost app]# vi /etc/sudoers
# 大概在100行,可通过 /ALL 来检索下,或 :100 直接跳转
# 按 i 进入编辑,在 root ALL=(ALL)  ALL 下添加以下代码,按 Esc 退出编辑,输入 :wq! 强制保存退出
appuser    ALL=(ALL)       ALL

二、Windows 环境安装JDK

1、下载

根据实际需求,在 Oracle 官网 上下载某版本JDK(如 jdk-8u281-windows-x64.exe)。
在这里插入图片描述

2、安装

双击下载的 jdk-8u281-windows-x64.exe,选择安装路径(尽量安装在固态硬盘),之后一路下一步

JDK1

JDK2

JDK3

3、配置环境变量

  • 第一步,右键 “此电脑/计算机”,点击 “属性”,点击 “高级系统设置”,点击 “环境变量”

env0

env1

env2

  • 第二步, 新建 JAVA_HOME 变量:在系统变量中,点击 “新建”

env3

  • 第三步,选择性配置 CLASSPATH 变量:在系统变量中,点击 “新建”

ENV6

  • 第四步,编辑Path变量,将“%JAVA_HOME%\bin”和“%JAVA_HOME%\jre\bin”加入Path的变量值中

env4
注意:每次编辑完“环境变量”,都要点击“确定”加以保存,否则配置无效

4、测试

点击 win+r,输入 cmd 打开命令行窗口,输入 java -version

version

三、Mac 环境安装JDK

1、下载

根据实际需求,在 Oracle 官网 上下载某版本JDK(如 M芯片- jdk-8u421-macosx-aarch64.dmg 、 Intel芯片- jdk-8u421-macosx-x64.dmg)(如果下载 tar.gz,参见Linux环境安装方式)。

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

4、多版本配置切换

# 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/Homeexport 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.exejavaw.exejavaws.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来执行xxxjava.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版本
  • Linux 多个JDK版本切换

http://www.mrgr.cn/news/77927.html

相关文章:

  • 如何通过OpenSSL来创建自签名的CA证书?
  • “LLM是否是泡沫”
  • 恋爱通信史之完整性
  • 力扣-位运算-1【算法学习day.41】
  • SpringCloud Gateway转发请求到同一个服务的不同端口
  • uniapp接入高德地图
  • Android 常用命令和工具解析之内存相关
  • 深入解析自适应控制算法及python实现
  • 深入解析自校正控制(STC)算法及python实现
  • Flink转换算子——flatMap/map/filter/keyby/reduce综合案例
  • git使用教程
  • Python学习------第十一天
  • 小白学多线程(持续更新中)
  • 数据结构 (5)栈
  • TCP socket api详解
  • Android 常用命令和工具解析之GPU相关
  • 数字信号处理(Digital Signal Procession)总结
  • 从搭建uni-app+vue3工程开始
  • Linux高阶——1117—TCP客户端服务端
  • HarmonyOS:使用ArkWeb构建页面
  • 工具学习_Docker
  • 用Tauri框架构建跨平台桌面应用:1、Tauri快速开始
  • 学习python的第十三天之函数——函数的返回值
  • 如何使用docker、docker挂载数据,以及让docker使用宿主机器的GPU环境 + docker重启小妙招
  • 华为云鸿蒙应用入门级开发者认证考试题库(理论题和实验题)
  • 论文阅读——Intrusion detection systems using longshort‑term memory (LSTM)