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

devtools/2024/11/20 15:25:39/

一、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/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版本

http://www.ppmy.cn/devtools/135512.html

相关文章

计算光纤色散带来的相位移动 matlab

需要注意的地方 1.以下内容纯属个人理解,很有可能不准确,请大家仅做参考 2.光速不要直接用3e8 m/s,需要用精确的2.9979.... 3.光的频率无论在真空还是光纤(介质)都是不变的,是固有属性,但是波长lambdac/f在不同的介…

Scala 中迭代器的duplicate方法,toList方法,zip方法

duplicate方法: 复制迭代器 duplicate 返回值是一个元组,有两个数据源一样的,独立的迭代器 迭代器特点:不能回头val list8List("A","B","C")val (it8,it9)list8.iterator.duplicatewhile (it8.has…

opencv kdtree pcl kdtree 效率对比

由于项目中以一个环节需要使用kdtree ,对性能要求比较严苛&#xff0c;所以看看那个kdtree效率高一些。对比了opencv和pcl。 #include <array> #include <deque> #include <fstream> #include <opencv2/highgui.hpp> #include <opencv2/imgproc.hpp…

二本学院非科班天崩开局,如何逆天改命拿下大厂后端

天崩开局&#xff0c;如何破局自救 2021 年高考结束&#xff0c;我当时的第一志愿是计算机科学与技术专业&#xff0c;但是我被录取到了河南工程学院的高分子材料与工程专业。 我去咨询计算机相关行业的从业者&#xff0c;以及多方面网络搜集相关信息之后得到了一个很现实的消…

2024JYU计算机大赛决赛题解

U505016 退休 思路 至少需要的月数为 ⌈ 1000000 a b ⌉ \lceil\frac{1000000}{ab}\rceil ⌈ab1000000​⌉。 当月数为 k k k 时&#xff0c;可以用 ⌊ k 12 ⌋ \lfloor \frac{k}{12}\rfloor ⌊12k​⌋ 年 k % 12 k \% 12 k%12 月表示。 因为每 12 12 12 个月一年&am…

C# 文件及数据流技术

文章目录 1.文件系统操作1.1 常用文件系统类1.2 示例:文件和目录操作2.文件的读取与写入2.1 读取文件内容2.2 写入文件内容2.3 文件的读写优化3.数据流 (Stream)3.1 常用流类3.2 FileStream 示例3.3 MemoryStream 示例4.读写数据的高级技巧4.1 异步文件与流处理4.2 压缩与解压…

3、.Net UI库:CSharpSkin - 开源项目研究文章

CSharpSkin(C# 皮肤)是一个基于C#语言开发的UI框架&#xff0c;它允许开发者使用C#和.NET技术栈来创建跨平台的桌面应用程序。CSharpSkin框架通常用于实现具有自定义外观和感觉的应用程序界面&#xff0c;它提供了一套丰富的控件和组件&#xff0c;以及灵活的样式和布局系统。 …

0017__多播,IP_MULTICAST_TTL,IP_ADD_MEMBERSHIP,IP_MULTICAST_IF,IP_DROP_MEMBERSHIP

多播,IP_MULTICAST_TTL,IP_ADD_MEMBERSHIP,IP_MULTICAST_IF,IP_DROP_MEMBERSHIP_multicast membership-CSDN博客 IP_MULTICAST_LOOP - 郁郁思扬 - 博客园