JDK的安装与配置

news2024/11/24 4:57:07

所有的开发,第一步必然是准备环境,而JDK提供了一套完整的工具和环境,使开发人员能够编写、编译和运行Java应用程序。是Java开发的基础,为开发者提供了丰富的功能和工具,简化了Java应用程序开发的过程。所以这里就记录一下JDK的安装与配置过程;

这里全部是基于Windows的内容噢~

JDK的两个版本

现在的JDK主要有两个版本,分别是OpenJDK和Oracle JDK;

OpenJDK 项目最初由 Sun Microsystems 开源 Java 项目(Project OpenJDK)发起,于2006年开始,并在2007年正式对外发布。Oracle JDK 则是基于 Sun Microsystems 的原始代码,在 Sun 公司被 Oracle 收购后由 Oracle 继续开发和发布。在 Java 7 和 Java 8 以后的版本中,Oracle JDK 通常会先发布官方版本,随后 OpenJDK 会以几个月或更长时间的滞后发布对应的开源版本。但从 Java 11 开始,OpenJDK 和 Oracle JDK 的发布时间几乎是同步的,这使得开发者可以更灵活地选择适合自己需求的 JDK 版本。

  • OpenJDK(Open Java Development Kit)

    • OpenJDK是一个开放源代码项目,由社区维护和开发。它是基于Sun Microsystems的Java SE规范开发的,源代码完全公开并可于GPL许可证下使用。
    • OpenJDK提供了Java编译器(javac)、Java虚拟机(JVM)、核心类库和其他与Java开发相关的工具。它是一个多平台的解决方案,支持在各种操作系统上进行Java应用程序的开发和执行。
    • OpenJDK的目标是提供一个免费、开放的Java开发工具包,并鼓励社区参与和贡献。
  • Oracle JDK(Oracle Java Development Kit)

    • Oracle JDK是由Oracle Corporation开发和维护的Java开发工具包。它是商业收费的,并提供了额外的功能和支持。
    • Oracle JDK包含了OpenJDK的所有功能,并附加了一些商业特性,如Java Flight Recorder和Mission Control等。此外,Oracle JDK还提供了长期支持(Long-Term Support,LTS)版本,用于企业级应用,提供长期的技术支持和更新。
    • 商业版的Oracle JDK还包括了一些高级功能和工具,如性能监视器、安全增强、商业模块等。
  • 查看本地安装的jdk是什么版本:

安装好了之后,在命令窗口win+r后输入cmd回车运行java -version就有类似下图的信息反馈:

第一个图就是oracle jdk;第二个是open jdk

当然这一切都要等安装好后;

image-20230712213854750

image-20230712215909885

下载安装包

Open JDKOracle JDK的安装包不一样,所以安装方式也是有所不同的;oracle jdk多为使用可执行的安装程序,而open jdk多为压缩包文件,直接解压即可,所以要有所区分;

Open JDK

官网:https://jdk.java.net/java-se-ri/11-MR2,进入网站后,找到对应的版本就可以下载安装包了;

例如下图,就是下载的jdk 11版本的安装包;

这里就可以发现,下载的就是zip压缩包,具体的安装步骤见后文;

image-20230712161818709

Oracle JDK

官网https://www.oracle.com/java/technologies/downloads/,进入官网,选择要下载的版本,进入后选择windows的安装包,然后选择可执行的安装程序包,点击下载即可,有可能会需要登录账号啥的,弄一下就行;

这里下载完了之后,就可以看到一个exe的可执行安装程序了;

image-20230713001704970

官网下载其实网速还可以,还嫌慢的话可以直接百度jdk镜像即可,oracle jdk和open jdk都有;

安装与环境配置

Open JDK

其实也不用强调openjdk,主要是zip压缩包的安装;

  • 首先,把安装包放到你想安装jdk的位置,然后解压即可;

image-20230712162128882

  • 其次就是配置环境变量了,是不是很突然,压缩包就这样,免安装,美滋滋;

这里进入系统属性然后点击环境变量进入到系统变量的配置界面:

image-20230712162217936

  • 然后选择系统变量的Path变量,点击编辑

image-20230712162316066

  • 点击新建,将jdkbin目录的完整路径复制进来即可

image-20230712162409147

  • win+r输入cmd打开命令窗口,输入java -version查看jdk版本信息,正常输出即安装并配置成功;

image-20230712162515845

Oracle JDK

  • 运行exe安装包,点击下一步

image-20230712203922199

  • 修改安装位置,点击下一步

image-20230712204156196

  • 等待安装即可

image-20230712204257996

image-20230712204312408

  • 安装成功!

image-20230712204357815

正常到这里就完成了环境变量的配置了,就是执行这个安装程序的时候,在安装过程中可能就已经配置好环境变量了;

如下图,就已经安装好了;

但是这里有个问题,当同时安装了两个版本,会怎么样呢?见下文Q&A部分:

image-20230713003020997

Q&A

JDK 8和JDK 1.8

在Java的版本命名中,缺少了一些一致性。在Java的早期版本中,版本号使用了"1.x"的格式,例如Java 1.7、Java 1.8等。而在Java 9之后,Oracle决定修改版本号的格式,采用了更简洁的形式,即"9"、“10”、"11"等。

然而,为了保持向后兼容性和方便开发者的使用,Java 9之后的版本也可以使用传统的"1.x"格式进行表示,所以我们经常还会看到"Java 1.9"、“Java 1.10”、"Java 1.11"的称呼,尽管实际上官方更推荐使用简洁的版本号。

因此,当我们说"JDK 8"时,实际上就是指代了"Java 1.8",它们是同一个版本的不同称呼,用以表示Java 8所对应的开发工具包。这种称呼习惯可能在Java社区中得到广泛接受,并且在许多文档和资料中都沿用了这个习惯。

同时安装多版本JDK

  • 是否冲突

首先,电脑上安装多个 JDK 通常不会直接导致冲突,因为每个 JDK 在安装时都会被放置在单独的目录中,并且具有独立的环境变量。这意味着你可以同时拥有多个 JDK 版本,并根据需要使用其中的一个。

  • 如何切换版本

在环境变量中切换对应版本的地址即可;

  • 安装了Oracle JDK后的环境变量情况

具体的场景就是,我先安装了一个open jdk 11,后来又安装了一个oracle jdk 20;安装了20后,在命令窗口运行java version就已经是20版本了;打开环境变量配置页面,就可以看到如下内容,exe安装会自动添加一个变量,而且优先级很高;

image-20230713004215402

这个时候java是20版本,通过where java也可以看到有两个安装好的jdk,且oracle jdkopen jdk前面;所以这里就算有两个环境变量,也不会冲突,因为是有优先级的;

image-20230713004345720

我们把oracle jdk的环境变量移到最下面:

image-20230713004547803

然后重启命令窗口(一定要重启),结果如下,版本和优先级都切换好了;

image-20230713004725364

至于这里oracle jdk的变量指向的不是安装目录,具体原因我也没研究,知情的小伙伴可以留言~


感谢阅读!

原文链接:https://blog.jiumoz.com/archives/jdk-de-an-zhuang-yu-pei-zhi

欢 迎 关 注 博 主 个 人 小 程 序!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++教程——vector容器、deque容器、stack容器、queue容器、list容器、set容器、map容器

vector容器 基本概念 vector赋值操作 vector容量和大小 vector插入与删除 vector数据存取 vector互换容器 vector预留空间:减少开辟内存空间的次数 deque容器 deque构造函数 deque赋值方式 deque大小操作 deque插入和删除 deque数据存取 deque排序 stack容器 stack…

iOS开发 - 系统自带框架实现扫一扫功能

iOS 扫一扫 利用系统自带框架实现扫一扫功能 一 项目配置 扫一扫功能相机和相册权限&#xff0c;在info.plist中设置询问用户是否允许访问的权限。 info.plist加入NSCameraUsageDescription、NSPhotoLibraryUsageDescription、NSPhotoLibraryAddUsageDescription <key&g…

java.lang.UnsatisfiedLinkError: Could not load SWT library.

java.lang.UnsatisfiedLinkError: Could not load SWT library. https://download.eclipse.org/windowbuilder/lastgoodbuild

力扣206. 反转链表

题目 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 链接&#xff1a;206. 反转链表 - 力扣&#xff08;LeetCode&#xff09; 题解 方法一&#xff1a;类似头插法 设置3个指针cur、next、newhead&#xff0c;其中cur和next指向当前链表头…

Kubernetes基础知识点

k8s可以看做是一个集群操作系统&#xff0c;能够对容器进行调度和编排。 Kubernetes中的基本对象 pod 是k8s中的最小单位&#xff0c;一个pod封装一个或者多个容器&#xff0c;存储资源。 deployment 是对pod的服务化封装&#xff0c;可以包含一个或多个pod statefulset 为…

ArcGIS处理nc数据步骤

降水温度蒸散发等气象数据通常以NC格式存储&#xff0c;可以用Matlab和ArcGIS读取数据。常为逐年逐月逐日数据。在用GIS进行数据分析时&#xff0c;需要将其转换为栅格数据。 &#xff08;1&#xff09;打开nc数据。打开GIS, ArcToolbox-Multidimension Tools-Make NetCDF Rast…

多线程高频知识点—2023

多线程高频知识点—2023 多线程的基本概念什么是线程/进程为什么在进程中还需要线程呢&#xff1f;同步与异步的区别程序计数器多线程的应用场景多线程的创建方式手写一个异步日志框架多线程线程安全问题 多线程的基本概念 什么是cpu CPU的中文名称是中央处理器&#xff0c;是…

【优选算法】—— 滑动窗口类问题

本期&#xff0c;我给大家带来的是关于滑动窗口类算法的介绍&#xff0c;并通过具体的题目帮助大家思考理解。 目录 &#xff08;一&#xff09;基本概念 &#xff08;二&#xff09;题目讲解 1、难度&#xff1a;medium 1️⃣长度最小的子数组 2️⃣找到字符串中所有字⺟…

Xcode 更新后 Version 14.3.1报错

File not found: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphonesimulator.a Xode版本和pod版本不一致导致&#xff0c;改成一致就可以了 放在podfile文件里,最后一个pod,和最后一个end中间 Showing Recent …

将字符串转换为字典json.loads(字符串)

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 将字符串转换为字典 json.loads(字符串) [太阳]选择题 关于以下代码说法错误的是? import json myStr{"name":"xiaobai","age":30} print(【显示】mySt…

【论文阅读】TransCAM: Transformer Attention-based CAM Refinement for WSSS

分享一篇阅读的用于弱监督分割的论文 论文标题&#xff1a; TransCAM: Transformer Attention-based CAM Refinement for Weakly Supervised Semantic Segmentation 作者信息&#xff1a; 代码地址&#xff1a; https://github.com/liruiwen/TransCAM Abstract 大多数现有…

java判断某个字符串是否在字符串数组中的方法(4种)

1.效率最高&#xff08;最原始&#xff09; 代码如下&#xff08;示例&#xff09;&#xff1a; public class Demo { public static boolean useLoop(String[] arr, String targetValue) { for (String s : arr) { if (s.equals(targetValue)) return true; } return false; }…

图像分类——模型微调

目录 微调热狗识别获取数据集模型构建与训练 微调 热狗识别 获取数据集 import tensorflow as tf import pathlibtraindirhotdog/train testdirhotdog/test image_gentf.keras.preprocessing.image.ImageDataGenerator(rescale1/255) train_data_genimage_gen.flow_from_direc…

2023年Q2空调行业品牌数据榜单(京东商品数据)

随着夏季的来临&#xff0c;高温天气也带动部分家电行业的销售&#xff0c;以空调为代表的家电市场正逐步恢复活力。结合鲸参谋电商数据分析平台的相关数据&#xff0c;我们来分析一下2023年Q2空调市场的具体销售表现。 根据鲸参谋平台的数据显示&#xff0c;2023年4-6月份&am…

TypeScript学习(2)- ts基本类型

类型声明式Ts非常重要的一个特点&#xff0c;通过类型声明可以指定TS中变量&#xff08;参数&#xff0c;形参&#xff09;的类型。指定类型后&#xff0c;当为变量赋值时&#xff0c;ts编译器会自动检查值是否符合类型声明&#xff0c;符合则赋值&#xff0c;否则报错。 目录 …

从VAE到Diffusion生成模型详解(1):VAE

文章目录 1. 生成式模型简介2. PixelRNN/CNN3. VAE3.1 自编码器AE3.2 VAE基本原理3.3 VAE公式推导 4. 参考 1. 生成式模型简介 什么是生成式模型 给定训练集&#xff0c;产生与训练集同分布的新样本。如下图所示&#xff0c;希望学习到一个模型 p m o d e l ( x ) p_{model}(…

22 分页控件

文章目录 界面设置初始化主对话框子页面初始化 页面1枚举窗口页面2枚举进程全部代码 界面设置 ui 设置 >创建CTablCtrl > 创建页控件&#xff08;子窗口&#xff09;&#xff0c;style设置成为chlid 添加类 页面中加入listCtrl 控件 添加变量 分别添加初始化函数 初始化…

举例说明单层神经网络的工作原理

假设我们有一个简单的单层神经网络&#xff0c;用于解决一个简单的问题&#xff1a;根据一个人的年龄&#xff08;x&#xff09;来预测其收入&#xff08;y&#xff09;。在这个例子中&#xff0c;输入数据只有一个特征&#xff08;年龄&#xff09;&#xff0c;因此我们可以用…

Can转以太网网关can协议转以太网协议

YC-ETH-CAN-2 是一款用来把 CAN 总线数据转为网口数据的设备。网口支持 TCP Sever、TCP Client、UDP Sever、UDP Client、UDP Broadcast 模式&#xff0c;可以通过软件配置和网页配置。 设备提供两路 CAN 接口&#xff0c;两路 CAN 可分别配置为不同的工作模式&#xff0c;独立…

[QT编程系列-4]:C++图形用户界面编程,QT框架快速入门培训 - 2- QT程序的运行框架:信号、槽函数、对象之间的通信

目录 2. QT程序的运行框架 2.4 设计界面元素的行为&#xff1a;信号、槽函数、对象之间的通信 2.4.1 对象之间的通信 2.4.2 信号槽与消息队里区别 2.4.3 预定义信号与默认槽函数 2.4.4 预定义信号与默认槽函数&#xff1a;案例2 2.4.5 预定义信号与自定义槽函数&#xff…