1.3 Java的版本和版本号(Java SE、Jakarta EE、发布模式、LTS等)〜Java基础篇
首先
自我介绍
大家好,我是Udemy讲师斋藤贤哉。我在过去的25年里一直从事企业系统的开发工作。尤其是作为架构师,我拥有丰富的技术设计经验,涵盖了关键系统的技术设计以及Java框架开发。
我在各种研讨会上发表演讲,为技术杂志撰写技术文章,并且还撰写了以下的书籍。
-
- 「マスタリング Java EE 5」(2007年)
- 「アプリケーションアーキテクチャ設計パターン」(2017年)
以下是一本关于企业系统开发,以Java EE(Jakarta EE)为核心的图书。其中,《应用架构设计模式》特别涵盖了相对普适的主题(不仅限于Java),内容至今仍然新鲜,对对此感兴趣的读者,尤其是中级开发者,希望一定能够阅读。
介紹一下Udemy的課程
这篇文章涵盖了我在Udemy上担任讲师的《Java基础篇》课程的一部分内容。你可以通过这个链接购买《Java基础篇》课程(该课程不参与折扣销售,价格始终不变)。此外,我们会定期在Qiita上发布可享受定价约30%折扣的优惠券,如果你感兴趣的话,请务必查看我的其他文章。
我推荐这门课给以下的人群。
-
- Javaの言語仕様や文法を正しく理解すると同時に、現場での実践的なスキル習得を目指している方
-
- 新卒でIT企業に入社、またはIT部門に配属になった、新米システムエンジニアの方
-
- 長年IT部門で活躍されてきた中堅層の方で、学び直し(リスキル)に挑戦しようとしている方
-
- 今後、フリーランスエンジニアとしてのキャリアを検討している方
-
- 「Chat GPT」のエンジニアリングへの活用に興味のある方
-
- 「Oracle認定Javaプログラマ」の資格取得を目指している方
- IT企業やIT部門の教育研修部門において、新人研修やリスキルのためのオンライン教材をお探しの方
整个系列涉及到的问题。
这个系列中所有的文章一览。
这篇文章涵盖了Java SE的一些功能和规范,它是一系列文章中的一部分,整个系列覆盖了Java SE的所有内容。同时,它也包括了“Oracle认证Java程序员”(Silver、Gold)的范围。有关整个系列的概述以及与“Oracle认证Java程序员”范围的对应关系,请参阅以下内容。
1.3 Java的版本和版本
章节概述
在这一章节中,我们将学习Java的三个版本以及Java在每一次升级中增加了哪些功能。
1.3.1 Java的版本
Java有三个标准版本,根据用途和目的可以选择。每个版本都提供类库(API)和相应的开发和运行环境。
Java SE(Java平台,标准版)
Java SE是供开发和执行Java程序所使用的环境,同时也提供了Java最基础的类库。这些类库包含了一些代表字符串的java.lang.String类和代表数字的java.lang.Integer类等与语言本身相关的功能。
Java 企业级平台(Java Enterprise Edition)
Java EE是为企业系统开发Java应用程序提供运行环境以及开发所需的类库的一个版本。最初Java EE的权利归属于Oracle公司,但在2017年被开源化,并更名为”Jakarta EE”,因此如今不再使用”Java EE”这个名称。
Java ME(简称Java平台移动版)
Java ME是为移动设备执行Java应用程序并提供用于开发这些应用程序的类库的版本。 Java ME是面向资源受限的移动设备的最小配置版本,但随着移动设备性能的提高,Java SE能够正常运行,因此Java ME不再被使用。
1.3.2 Java的发布模型
Java(也称为Java SE)最初发布于1995年,随后进行了多次版本更新,截至2022年6月,最新版本为Java 18。
下面将解释Java采用了哪种发布模型。
Java的发布模型
最初的Java发布模型是首先确定应该包含在下一个版本中的功能,然后在功能开发完成后立即发布。然而,在这个模型中,如果新功能的开发时间超过预期,必然会导致下一个版本的发布延迟,并且整个Java技术的发展也可能停滞不前。
因此,从2017年9月发布的Java 9开始,发布模型发生了变化,首先确定发布时间,只将可以包含在下一个版本中的功能纳入其中。由于这个模型的发行周期为半年,所以Java 9之后,版本号的升级速度会突然加快。
然而,由于每半年发布一次的所有版本都很难进行维护,因此每3年,即每6个版本发布一次的版本将被设置为LTS(长期支持)并作为长期支持的目标。对于需要长期支持的企业系统等情况,应选择LTS版本。
Java的版本和发布日期。
Java的版本和发布日期,以及LTS目标如下表所示。
【表1-3-1】Java 版本、发布日期和 LTS 支持目标
Java 102018年3月
Java 112018年9月対象Java 122019年3月
Java 132019年9月
Java 142020年3月
Java 152020年9月
Java 162021年3月
Java 172021年9月対象
1.3.3 版的 Java 及其主要功能
在Java 5版本之后的升级中,我们将整理出主要功能,展示追加了哪些功能。请注意,对于这里提到的每个功能,我们会在后续的章节或“让我们学习”系列的其他课程中进行详细解释,所以在这个时点上你无需了解详细内容。
Java 5是一种计算机编程语言。
• 增强型for循环
• 自动装箱
• 静态导入
• 可变参数
• 泛型
• 枚举类型
• 注解
Java 7的版本
• 数字分隔符
• switch语句的字符串匹配
• 多重捕获
• 资源的自动关闭
• Java NIO.2(java.nio.file API)
Java 8是一种编程语言的版本。
•接口中的默认方法和静态方法
•函数式接口
•Lambda表达式
•方法引用
•流API
•日期和时间API
•Optional类
Java 9
• 模块化系统
• JShell
Java十版本
• 局部变量类型推断(var关键字)
Java 11: Java十一
• HTTP客户端API
Java 12是12号版本的Java。
• 扩展switch语句(允许在case子句中添加多个值)
Java 14是最新版本的Java。
• switch式(返回值的switch语句)
Java 15 及其以上版本
• 文本块
Java 16
• 记录类
• 使用instanceof进行模式匹配
本课程所依赖的版本
在本课程中,我们将以最新的LTS版本Java 17作为基础进行讲解,截止到2022年6月为止。然而,Java 17的发布时间还不久,目前仍然有很多人在使用Java 8或Java 11。因此,在解释添加于Java 9及以后版本的功能时,我们会明确说明该功能是在哪个版本中添加的。
请根据预期使用的版本,与学生们进行比较,并推进课程。
1.3.4 Java SE类库的整体概览
Java SE类库的主要模块和包
在此,我们将一起介绍Java SE类库中的主要模块和包。关于模块的详细说明将在《Java高级篇》中进行,关于包的详细说明将在第9.1章中进行,但在这里只需将其理解为用于分类类的组即可,这样就没有问题了。
【表1-3-2】Java SE 类库中的主要模块和包裹
java.utilコレクションフレームワークを初めとした様々なユーティリティクラス『Java Basic編』チャプター19.1~19.2
java.util.regex正規表現のためのクラス『Java Basic編』チャプター16.2
java.text数値や日時をフォーマッティングしたり解析したりするためのクラス『Java Basic編』チャプター17.1、20.1
java.timeDate and Time APIにおいて、日付と時間などを表すクラス『Java Basic編』チャプター20.2
java.time.temporalDate and Time APIにおいて、日付や時間の単位表現や計算を行うクラス『Java Basic編』チャプター20.2
java.time.formatDate and Time APIにおいて、日付と時間をフォーマッティングしたり解析したりするクラス『Java Basic編』チャプター20.2
java.util.concurrent並行処理ユーティリティ(Concurrency Utilities)でサポートされたクラス『Java Advanced編』チャプター3.2~3.3
java.util.concurrent.locksロックの機能を提供するクラス『Java Advanced編』チャプター3.1
java.util.concurrent.atomicアトミックを保証クラス『Java Advanced編』チャプター3.3
java.util.function関数型インタフェース(ラムダ式やメソッド参照で実装)『Java Advanced編』チャプター4.1
java.util.streamStreamクラスなどストリームAPIの主要なクラス『Java Advanced編』チャプター4.2
java.ioファイル、データ、直列化など入出力のためのクラス『Java Advanced編』チャプター5.1、5.2
java.netネットワーク通信のための基本的なクラス『Java Advanced編』チャプター6.1
java.nioJava NIO全体で使用するクラス『Java Advanced編』チャプター5.1、6.1
java.nio.fileJava NIO.2において、ファイルを操作するためのクラス『Java Advanced編』チャプター5.1
java.nio.channelsJava NIOにおいて、チャネルを表すためのクラス『Java Advanced編』チャプター6.1
java.nio.charsetJava NIOにおいて、文字コードを表すためのクラス『Java Advanced編』チャプター6.1
java.lang.reflectリフレクションのためのクラス『Java Advanced編』チャプター8.2
java.lang.annotationアノテーションの機能を提供するためのクラス『Java Advanced編』チャプター8.3java.net.httpjava.net.httpHTTPクライアントAPIでサポートされた、HTTP通信用のクラス『Java Advanced編』チャプター6.2java.sqljava.sqlデータベースアクセス(JDBC)のためのクラス『Java Practical編』予定java.xmlorg.w3c.domDocument Object Model(DOM)のインタフェース『Java Practical編』予定
javax.xml.parsersDOMを使用してXML文書を処理するためのクラス『Java Practical編』予定
javax.xml.streamStreaming API for XML(StAX)のインタフェースとクラス『Java Practical編』予定
javax.xml.stream.eventsStreaming API for XML(StAX)のイベントを表すインタフェース『Java Practical編』予定
javax.xml.xpathXPath式のためのAPIを提供するクラス『Java Practical編』予定
当我们从模块和包的角度来俯瞰Java SE的类库时,由于历史原因,我们会注意到包的粒度存在差异。例如,java.util包是一个庞大的包,其中包含了集合框架等等。而Java NIO提供的类则根据功能被细分为不同的包。
总之,我们应该明白包的数量和提供的功能大小并不一定成正比。
在这个章节中学到的东西。
在这一章中,我们学到了以下内容。
-
- Java有三个版本,分别是Java SE、Java EE(Jakarta EE)和Java ME。
-
- 关于Java的发布模式和LTS的概念。
-
- 自Java 5以来,有哪些功能被添加进来。
- Java SE类库的整体概况。