【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

二、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)。

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.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版本

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/921663.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Web3与智能合约:区块链技术下的数字信任体系

随着互联网的不断发展,Web3代表着我们迈入了一个去中心化、更加安全和智能的网络时代。作为Web3的核心组成部分,区块链技术为智能合约的出现和发展提供了强有力的基础。智能合约不仅仅是自动化的代码,它们正逐步成为重塑数字世界信任体系的关…

怎么把湖南平江1000吨黄金开采出来?开采露天金矿的实用公式与方案——露天矿山爆破设计施工方案

在露天矿山爆破设计中,面对多溶洞、多破碎带和多断层的复杂地质条件,需要制定一套科学、合理的爆破方案。以下是一份详细的爆破设计施工方案,包括爆破参数与计算公式: 一、爆破设计原则 1.安全性:确保爆破作业过程中的…

电子应用设计方案-20:智能电冰箱系统方案设计

智能电冰箱系统方案设计 一、系统概述 本智能电冰箱系统旨在提供更便捷、高效、智能化的食品存储和管理解决方案,通过集成多种传感器、智能控制技术和联网功能,实现对冰箱内部环境的精确监测和控制,以及与用户的互动和远程管理。 二、系统组成…

栈的应用,力扣394.字符串解码力扣946.验证栈序列力扣429.N叉树的层序遍历力扣103.二叉树的锯齿形层序遍历

目录 力扣394.字符串解码 力扣946.验证栈序列 力扣429.N叉树的层序遍历 力扣103.二叉树的锯齿形层序遍历 力扣394.字符串解码 看见括号,由内而外,转向用栈解决。使用两个栈处理,一个用String,一个用Integer 遇到数字:提取数字放入到数字栈…

pandas与open读取csv/txt文件速度比较

pandas与open读取csv/txt文件速度比较 由于在工作中经常需要读取txt或csv文件,使用pandas与open均可以读取并操作文件内容,但不知道那个速度更快一些,所以写了一个脚本去比较在文件大小不同的情况下读取数据的速度 测试结果: 大小pandas速度…

039_SettingsGroup_in_Matlab图形界面的设置选项

只要你知道你自己正在做什么,那么你怎么做都行。—— C.J. DateMatlab的界面与设置 Matlab的界面 Matlab的界面是GUI设计中非常值得讨论的一个议题。先来看,默认的Matlab界面。 这里的界面从上到下分为了四个部分,分别是: 工具…

Flink-Source的使用

Data Sources 是什么呢?就字面意思其实就可以知道:数据来源。 Flink 做为一款流式计算框架,它可用来做批处理,也可以用来做流处理,这个 Data Sources 就是数据的来源地。 flink在批/流处理中常见的source主要有两大类…

.net的winfrom程序 窗体透明打开窗体时出现在屏幕右上角

窗体透明, 将Form的属性Opacity,由默认的100% 调整到 80%(尽量别低于50%),这个数字越小越透明! 打开窗体时出现在屏幕右上角 //构造函数 public frmCalendarList() {InitializeComponent();//打开窗体,窗体出现在屏幕…

分布式系统稳定性建设-性能优化篇

分布式系统稳定性建设-性能优化篇 系统稳定性建设是系统工程的核心内容之一。以下是一些重要的方面: 架构设计: 采用模块化、松耦合的架构设计,以提高系统的可扩展性和可维护性。合理划分系统功能模块,降低单个模块的复杂度。定义清晰的接口和数据交换标准,确保各模块之间协调…

【bug】使用transformers训练二分类任务时,训练损失异常大

使用transformers训练二分类任务时,训练损失异常大 问题分析 问题 training_loss异常大,在二分类损失中,收敛在1~2附近,而eval_loss却正常(小于0.5) 分析 参考: Bug in gradient accumulation…

电容测试流程

一、外观检测 1. 目的:检验电容样品外观是否与规格书一致,制程工艺是否良好,确保部品的品质。 2. 仪器:放大镜 3. 测试说明: (1)样品上丝印与规格书中相符,丝印信息(…

C++设计模式行为模式———中介者模式

文章目录 一、引言二、中介者模式三、总结 一、引言 中介者模式是一种行为设计模式, 能让你减少对象之间混乱无序的依赖关系。 该模式会限制对象之间的直接交互, 迫使它们通过一个中介者对象进行合作。 中介者模式可以减少对象之间混乱无序的依赖关系&…

一篇保姆式centos/ubuntu安装docker

前言: 本章节分别演示centos虚拟机,ubuntu虚拟机进行安装docker。 上一篇介绍:docker一键部署springboot项目 一:centos 1.卸载旧版本 yum remove docker docker-client docker-client-latest docker-common docker-latest doc…

EasyAnimate:基于Transformer架构的高性能长视频生成方法

这里主要是对EasyAnimate的论文阅读记录,感兴趣的话可以参考一下,如果想要直接阅读原英文论文的话地址在这里,如下所示: 摘要 本文介绍了EasyAnimate,一种利用Transformer架构实现高性能视频生成的高级方法。我们将原…

李宏毅机器学习课程知识点摘要(6-13集)

pytorch简单的语法和结构 dataset就是数据集,dataloader就是分装好一堆一堆的 他们都是torch.utils.data里面常用的函数,已经封装好了 下面的步骤是把数据集读进来 这里是读进来之后,进行处理 声音信号,黑白照片,红…

gpt2的学习

现在学习下gpt2模型做摘要,我们都知道gpt2 是纯decoder,做摘要说话的效果较好。 把数据拆分 按照这个进行tokenizer 用这个tokenizer BertTokenizer.from_pretrained(‘bert-base-chinese’) 2w多词汇表 用交叉熵做lossf, 设好一些简单的…

网络安全设备

防火墙 防火墙是管理和控制网络流量的重要工具,防火墙适用于过滤流量的网络设备。防火墙根据一组定义的规则过滤流量。 静态数据包过滤防火墙 静态数据包过滤防火墙通过检查消息头中的数据来过滤流量。通常,规则涉及源、目标和端口号。静态数据包过滤防…

Python爬虫:深入探索1688关键词接口获取之道

在数字化经济的浪潮中,数据的价值愈发凸显,尤其是在电商领域。对于电商平台而言,关键词不仅是搜索流量的入口,也是洞察市场趋势、优化营销策略的重要工具。1688作为中国领先的B2B电商平台,其关键词接口的获取对于商家来…

SpringCloud Gateway转发请求到同一个服务的不同端口

SpringCloud Gateway默认不支持将请求路由到一个服务的多个端口 本文将结合Gateway的处理流程,提供一些解决思路 需求背景 公司有一个IM项目,对外暴露了两个端口8081和8082,8081是springboot启动使用的端口,对外提供一些http接口…

全面监测Exchange邮件服务器的关键指标

在当今高度信息化的社会,Exchange邮件服务器已成为企业日常通信的重要组成部分。为了确保邮件服务器的稳定运行,及时发现潜在问题并采取相应的解决措施显得尤为重要。监控易作为一款专业的监控工具,为Exchange邮件服务器提供了全方位的监测功…