Javaのバージョンについて
Javaは2000年に日本でJava1.3(2000年リリース)の採用が増え、プログラマーの専門学校でJavaを教えるケースも増えました。
VB6による社内アプリケーションをJavaによる社内Webアプリケーションに作り変えるケースが多いようでした。
2000年から2008年まで景気が一時的に少し上がり、就職氷河期でしたが、契約社員か派遣社員の採用なら有りました。
2年間または3年間Javaを学んだ専門学校生がプログラマーとして働き始める頃にJava1.4(2002年リリース)に成り正規表現が使えるように成りました。
Java1.3のプロジェクトでは.jarファイルによる有名な正規表現の外部ライブラリを追加して正規表現を利用していました。
【Java1.4(2002年リリース)の新機能】
正規表現
java.util.logging
例外のコンストラクタに入れ子にする例外を指定可能化
New I/O
assert文
ImageIO
VolatileImage
Preferences(Windowsの場合は設定をレジストリに保存する機能)
など
【Java5(2004年リリース)の新機能】
static import
例えばList<String> list = new ArrayList<String>();といったジェネリクス
例えばfor(String string : list) {}といった拡張for文
オートボクシング
例えば@Overrideといったアノテーション
StringBuilder
java.util.concurrent
enum
例えばmethod(String...) {}といった可変長引数
JMX
など
2004年には、複雑なJavaEEへの抗議と言える、Springフレームワーク1.0がリリースされました。
【Java6(2006年リリース)の新機能】
Desktop
TrayIcon
和暦
Console
など
2007年にGroovy1.0がリリースされました。
2008年9月にリーマンショックが起き、2009年3月末に派遣切りが起きてしまいました。
2010年にOracle社がJavaを買収しました。
【Java7(2011年リリース)の新機能】
例えばList<String> list = new ArrayList<>();といったダイヤモンド演算子
try with resources文
java.nio.fileのPathとFilesといったNew I/O 2
switch文でcase "文字列":が可能化
例外の再throw可能化
catch(例外1|例外2) {}
数値を半角下線で区切る事が可能化
0b二進数
など
【Java8(2014年リリース)の新機能】 ※Java8はLTS(長期サポート)
ラムダ式 ※Groovyの書き方と異なる物を採用してしまった。
Stream
java.time
インターフェースにstaticメソッドを記述可能化
Stringにjoinメソッドが追加
Optional
など
2014年にSpringフレームワークが肥大化したのでSpringBoot1.0がリリースされました。
2015年にGroovyはApacheへ移管されてしまいました。
【Java9(2017年9月リリース)の新機能】
JShell
try with resources文でtryの外で宣言可能化
モジュール(Project Jigsaw)
など
※Java9以降、半年ごとに(9月と3月に)バージョンが1つ上がるように成ってしまいました。
【Java10の新機能】
var
など
【Java11の新機能】 ※Java11はLTS(長期サポート)
例えばjava Main.javaといった単一Javaファイルの即時実行が可能化
など
※Java11からOracleJDKとOpenJDKの2つが提供されるように成りました。
※Java11からOracleJDKは商用利用は有料に成ってしまいました。
※OpenJDKのうち、OracleのOpenJDKだけLTS(長期サポート)が無いです。
【Java12の新機能】
※省略
【Java13の新機能】
※省略
2020年2月にGroovy 3.0.0がリリースされてJava8に対応しました。
【Java14の新機能】
例えばcase 1, 2:
など
【Java15の新機能】
例えば
String string = """
1行目
2行目
""";
例えば"%d円".formatted(100)
など
【Java16の新機能】
record
など
2021年7月プログラミング言語の人気ランキングでJavaは1位から3位へ転落してしまいました。
【Java17(2021年9月リリース)の新機能】 ※Java17はLTS(長期サポート)
※省略
【Java18(2022年3月リリース)の新機能】
.javaファイルのデフォルトの文字コードがOSの文字コードからUTF-8へ変更
jwebserverコマンド
SimpleFileServerクラス
【Java19(2022年9月リリース)の新機能】
※省略
【Java20(2023年3月リリース)の新機能】
※省略
【Java21(2023年9月リリース)の新機能】 ※Java21はLTS(長期サポート)
例えばcase "文字":
など
【Java22(2024年3月リリース)の新機能】
半角下線(_)の無名変数
など
【Java23(2024年9月リリース)の新機能】
マークダウン記法のJavaDoc
など
2024年10月時点でLTS(長期サポート)なのはJava8、Java11、Java17、Java21です。ただし、OpenJDKのうちOracleのOpenJDKだけLTS(長期サポート)が無いです。
Javaのうち、LTS(長期サポート)ではないバージョンは、半年間を過ぎるとセキュリティ アップデートが無く成ってしまうので、アンインストールしないとセキュリティホールに成る可能性が有ります。
Javaを採用するなら、LTS(長期サポート)であるバージョンを採用する必要が有る、と言えます。
2024年10月時点で、古いバージョンのJREを考慮するなら、Java8のJDKで開発するべきである、かもしれません。
2025年6月時点で、Linux Mint22.1に、JavaはJDKもJREも標準でプリ インストールされていないようです。
Linux Mintに「ソフトウェアマネージャー」というアプリケーションで「Openjdk-11-jdk」などのJava11以降のJDKをインストールすると、「端末」というアプリケーションで「java Main.java」といった感じで、単一Javaファイルの即時実行が可能と成り、Javaをスクリプト感覚で利用できます。