Java和JDK的关系;以及JDK版本

一、Java和JDK的关系:

Java是一门面向对象的编程语言,而JDK(Java Development Kit)则是开发Java应用程序所需的软件开发工具包。Java语言本身与JDK之间存在紧密的依赖关系,具体如下:

  1. Java语言:定义了语法、语义、数据类型、类库规范等编程规则,是编写Java程序的基础。

  2. JDK:包含了编译器(javac)、解释器(java)、调试器(jdb)、文档生成工具(javadoc)等开发工具,以及Java运行环境(JRE)和Java基础类库(Java API)。JRE中包含了Java虚拟机(JVM)和Java标准类库,是运行Java程序所必需的环境。因此,可以说JDK是Java开发者用来编译、运行、调试和维护Java程序的完整开发工具集。

总结来说,Java语言是抽象的编程规范,而JDK是实现这一语言的具体工具集合。要编写和运行Java程序,必须安装相应的JDK版本。

二、目前JDK的版本及其发布时间、主要特性变化:

以下是Java(JDK)近年来的主要版本及其发布日期,以及每个版本中引入的一些关键特性和改进:

JDK 8 (LTS)

  • 发布日期:2014年3月18日
  • 主要特性:
    • Lambda表达式:极大地简化了函数式编程风格,增强了代码的简洁性和可读性。
    • Stream API:支持对集合数据流进行高效、声明式的处理。
    • 接口的默认方法和静态方法:允许在接口中定义默认实现,增强接口的灵活性和扩展性。
    • 新的日期/时间API(java.time包):替代旧的Date/Calendar类,提供更加丰富和易于使用的日期、时间、时区处理功能。
    • ** Nashorn JavaScript引擎**:内置高性能JavaScript执行环境。
    • 并发改进:如StampedLock,增强并发控制能力。
  • 注意“JDK 1.8”这种说法实际上是对“JDK 8”的一种习惯性称呼。这里的“1.8”并非表示JDK的版本号是1.8,而是指JDK的第8个主要版本。在Java的发展历史中,早期版本的命名方式确实包含了小数点,如JDK 1.5、JDK 1.6等。但从JDK 7开始,官方的命名方式去掉了小数点,直接采用“JDK 7”、“JDK 8”这样的形式。尽管官方已经采用了新的命名方式,但由于习惯和记忆的原因,很多人仍然沿用旧的命名方式,将“JDK 8”称为“JDK 1.8”。这种称呼在开发者社区中相当普遍,尤其是在讨论早期JDK版本与后续版本之间的区别和兼容性时。因此,当你听到“JDK 1.8”时,你应该明白它实际上指的是“JDK 8”。这是一个约定俗成的称呼,尽管它并不完全符合官方的命名规范。同时,了解这一点也有助于你更好地理解和参与Java开发社区的讨论。

JDK 9 (非LTS)

  • 发布日期:2017年9月21日
  • 主要特性:
    • 模块系统(Project Jigsaw):引入模块化架构,提升了大型应用的组织和部署能力。
    • JShell:交互式Java REPL(Read-Eval-Print Loop),方便快速原型开发和学习。
    • HTTP/2客户端:提供新的API支持HTTP/2协议。
    • 进程API:允许Java程序控制和管理操作系统进程。
    • 改进的Javadoc:支持HTML5,增强文档生成工具的功能和样式。

JDK 10 (非LTS)

  • 发布日期:2018年3月20日
  • 主要特性:
    • 局部变量类型推断(var关键字):简化变量声明,特别是在使用Lambda表达式和流时。
    • 垃圾回收器接口:为GC实现提供了统一的接口,便于定制和替换。
    • 根证书更新机制:通过JDK自动更新根证书存储,增强安全性。

JDK 11 (LTS)

  • 发布日期:2018年9月25日
  • 主要特性:
    • ZGC:低延迟垃圾收集器:实验性引入,提供接近实时的暂停时间。
    • Epsilon GC:无操作垃圾收集器:用于性能基准测试和特殊场景。
    • HTTP客户端标准化:将JDK 9的HTTP/2客户端升级为标准API。
    • Flight Recorder和Mission Control:用于监控、诊断和分析JVM和Java应用程序的工具,正式成为JDK一部分。
    • 移除Java EE和CORBA模块:精简JDK,将这些模块移至独立的项目。

JDK 12 - 1.png (非LTS)

  • 发布日期:2019年3月19日 - 2020年3月17日
  • 主要特性:
    • Switch表达式(预览):增强switch语句,使其能返回值并支持模式匹配。
    • Microbenchmark Suite:内置微基准测试框架,便于性能评估。
    • Shenandoah GC:实验性引入,提供低停顿时间的并发垃圾收集器。

JDK 13 - 1.png (非LTS)

  • 发布日期:2019年9月17日 - 2020年9月15日
  • 主要特性:
    • 文本块(Text Blocks):简化多行字符串的创建和处理。
    • Switch表达式(正式版):在JDK 12的基础上完善并正式启用。

JDK 14 - 1.png (非LTS)

  • 发布日期:2020年3月17日 - 2021年3月16日
  • 主要特性:
    • Records:简化数据类的定义,提供简洁的语法创建不可变对象。
    • Pattern Matching for instanceof:增强instanceof运算符,支持类型检查和解构赋值。

JDK 15 - 1.png (非LTS)

  • 发布日期:2020年9月15日 - 2021年9月14日
  • 主要特性:
    • 隐藏类(Hidden Classes):允许动态生成仅供内部使用的类,提高性能和内存效率。
    • ZGC:并发线程堆栈处理:增强ZGC对线程堆栈的并发处理能力。

JDK 16 (LTS)

  • 发布日期:2021年3月16日
  • 主要特性:
    • Records:正式启用,作为Java语言的新特性。
    • Packaging Tool (jpackage):简化Java应用程序打包为本地平台可安装格式。

JDK 17 (LTS)

  • 发布日期:2021年9月14日
  • 主要特性:
    • Sealed Classes:限制类的子类化,增强API设计的灵活性和安全性。
    • Pattern Matching for switch:增强switch语句,支持模式匹配。

JDK 18 (非LTS)

  • 发布日期:2022年3月22日
  • 主要特性:
    • Virtual Threads (Project Loom):轻量级线程( fibers),简化并发编程模型。
    • Structured Concurrency:通过try-with-resources风格的API支持结构化并发控制。

JDK 19 (非LTS)

  • 发布日期:2022年9月20日
  • 主要特性:
    • Foreign Function & Memory API (Preview):支持直接调用C/C++代码和操作外部内存。

请注意,上述列表中,LTS(Long-Term Support)版本通常提供更长时间的维护和支持,适合用于生产环境。非LTS版本则通常包含更多实验性或预览特性,适合开发人员探索和试用新技术。同时,每个版本的具体发布日期和特性可能随着Oracle的计划有所变动,建议查阅Oracle官方发布的最新信息以获取最准确的版本详情。

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

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

相关文章

ElasticSearch教程入门到精通——第六部分(基于ELK技术栈elasticsearch 7.x+8.x新特性)

ElasticSearch教程入门到精通——第六部分(基于ELK技术栈elasticsearch 7.x8.x新特性) 1. Elasticsearch优化1.1 硬件选择1.1 分片策略1.1.1 分片策略——合理设置分片数1.1.2 分片策略——推迟分片分配 1.2 路由选择1.2.1 路由选择——不带routing查询1…

哪款洗地机最好用?2024年四大口碑一流品牌推荐

随着人们生活质量的提升,人们的扫地、拖地都可以用智能清洁工具来高效完成,像洗地机它集合了扫地、拖地、自清洁等功能,让我们摆脱了每次打扫卫生就像打仗一样,忙活半小时下来腰酸背痛的窘境。所以越来越多的家庭纷纷开始用洗地机…

84.柱形图中最大的矩阵

二刷终于能过了. 思路解析: 不愧是hard,第一步就很难想, 对于每一个矩阵,我们要想清楚怎么拿到最大矩阵, 对于每个height[i],我们需要找到left和right,left是i左边第一个小于height[i]的,right是右边第一个小于height[i]的,那么他的最大矩阵就是height[i] * (right-left-…

鸿蒙launcher浅析

鸿蒙launcher浅析 鸿蒙launcher源码下载鸿蒙launcher模块launcher和普通的应用ui展示的区别 鸿蒙launcher源码下载 下载地址如下: https://gitee.com/openharmony/applications_launcher 鸿蒙launcher模块 下载页面已经有相关文件结构的介绍了 使用鸿蒙编辑器D…

国外企业使用生成式人工智能实例100

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

Welcome to nginx!怎么解决?

要解决 "welcome to nginx!" 错误,需要检查虚拟主机配置,启用虚拟主机,重新加载 nginx,如果无法找到虚拟主机配置文件,则创建默认页面并重新加载 nginx,这样错误消息将消失,网站将正常…

数据结构之顺顺顺——顺序表

1.浅谈数据结构 相信我们对数据结构都不陌生,我们之前学过的数组就是最基础的数据结构,它大概就长这样: 数组 而作为最简单的数据结构,数组只能帮助我们实现储存数据这一个功能,随着学习的深入,和问题的日渐…

Qt | 标准、复选、单选、工具、命令按钮大全

01、QPushButton QPushButton 类(标准按钮) 示例 3:默认按钮与自动默认按钮 02、QCheckBox QCheckBox 类(复选按钮) 1、复选按钮的第三状态(见右图 Qt5.10.1 的选中状态):是指除了选中 和未选中状态之外的第三种状态,这种状态用来指示“不变”,表 示用户既不选中也不取…

专栏目录【政安晨的机器学习笔记】

目录 政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: 政安晨的机器学习笔记 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正! 本篇是作者政安晨的专栏《政安晨的机器学习笔记》的…

Python学习笔记------模块和包

Python模块 简介与作用 Python模块是一个Python文件,以.py结尾,模块能定义函数、类和变量,模块里也包含可执行的代码 模块的作用:Python中有很多各种不同的模块,每个模块都可以帮我们快速实现一些功能,我…

grafana监控模板 regex截取ip地址

查看prometheus的node服务启动指标up,也可以查看其他的服务 配置监控模板 配置正则截取ip regex截取ip地址 /.*instance"([^"]*):9100*/ #提取(instance")开头,(:9001)结束字段

北京车展“第一枪”:长安汽车发布全球首款量产可变新汽车

4月25日,万众瞩目的2024北京国际汽车展览会在中国国际展览中心如期而至。作为中国乃至全球汽车行业的盛宴,本次车展也吸引了无数业内人士的高度关注。 此次北京车展以“新时代 新汽车”为主题,汇聚了1500余家主流车企及零部件制造商&#xff…

Laravel 6 - 第十七章 配置数据库

​ 文章目录 Laravel 6 - 第一章 简介 Laravel 6 - 第二章 项目搭建 Laravel 6 - 第三章 文件夹结构 Laravel 6 - 第四章 生命周期 Laravel 6 - 第五章 控制反转和依赖注入 Laravel 6 - 第六章 服务容器 Laravel 6 - 第七章 服务提供者 Laravel 6 - 第八章 门面 Laravel 6 - …

Kettle 中将图片url转换为Base64

背景 我遇到了一个应用场景需要将订阅kafka数据中的一个字段(图片url)转换为base64 然后进行下一步操作。 实现方式 我这边的实现方式是使用javaScript去实现的 图形化逻辑如下: 这一步就是实现url转换为base64 json input的步骤&#xf…

vulnhub靶场之driftingblues-6

一.环境搭建 1.靶场描述 get flags difficulty: easy about vm: tested and exported from virtualbox. dhcp and nested vtx/amdv enabled. you can contact me by email for troubleshooting or questions. 2.靶场下载 https://www.vulnhub.com/entry/driftingblues-6,6…

【Spring AI】聊天API-OpenAI-Function Call

文章目录 Function Calling工作原理快速上手将函数注册为 Bean纯 Java 函数实现(Plain Java Functions)FunctionCallback Wrapper Specifying functions in Chat OptionsRegister/Call Functions with Prompt Options 附录:Spring AI 函数调用…

MySQL使用Sequence创建唯一主键

目录 第一章、快速了解Sequence1.1)是什么?为什么使用1.2)Sequence和自增主键的区别 第二章、在MySQL中使用Sequence2.1)创建mysql_sequence表2.1.1)创建表2.1.2)插入数据 2.2)创建函数2.2.1&am…

Kubernetes学习-核心概念篇(三) 核心概念和专业术语

🏷️个人主页:牵着猫散步的鼠鼠 🏷️系列专栏:Kubernetes渐进式学习-专栏 🏷️个人学习笔记,若有缺误,欢迎评论区指正 1. 前言 在前面两篇文章我们简单介绍了什么是K8S,以及K8S的…

Vue面试经验

Vue部分 Vue编译时声明周期的执行顺序 Vue中父子组件渲染顺序(同步引入子组件:import Son from ‘/components/son’ ) 父子组件编译时的生命周期执行顺序 这里修改data数据时也修改了dom,如过知识通过按钮对数据进行操作&…

MySQL8.0 msi版本安装教程

MySQL8.0 msi 版本安装教程 1> 官网下载安装包 2> 安装MySQL 2.1双击打开下载的安装包,进入到下面这个页面,选择 Custom 选项,之后,点击next 说明: 2.2 选择所需产品,更改安装位置(当然也可以默认安…
最新文章