前回まで、Java SEの最も基本となるjava.baseモジュールの新機能を紹介してきました。今回はちょっと趣向を変えて、API以外に知っておきたい新機能や変更について紹介します。バージョン表記や非推奨APIの明確化、コンパイラのjavacやドキュメント自動生成のJavadocの改善といったものです。

バージョン表記

 Java SEのバージョン表記に紆余曲折があったのは、みなさんご存じの通りです。Java SE 8も「8」が表向きの「バージョン番号」であるにもかかわらず、javaコマンドを-versionオプションを指定して実行すると「1.8.0_131」のように出力されます。過去の経緯もあり、1.8.0は「バージョン文字列」として扱われます。バージョン番号とバージョン文字列は別物だと、公式ドキュメントにもうたってあります。この使い分けは煩雑でしかなく、アップデートリリースの番号も複雑になっていました。

 そこで、JEP 223: New Version-String Schemeにおいて、新しいバージョン番号とバージョン文字列が提案されています。新しいバージョン番号は以下のように定義されます。

Major.Minor.Security

 Major、Minor、Securityのいずれも数字だけで構成されます。Majorはメジャーバージョンを表します。Java SE 9であれば「9」がメジャー番号です。

 Minorはマイナーバージョンを表します。Java SEはJ2SE 5からマイナーバージョンアップがありませんでした。しかし、当初は機能の追加はないとされていたアップデートリリースでも、機能追加が行われるようになっています。そこで、Java SE 9ではマイナーバージョンアップが復活することになりました。

 最後のSecurityはセキュリティレベルを表します。セキュリティレベルは、マイナーバージョンアップがあっても「0」に戻ることはありません。あるメジャーリリースにおいてはセキュリティレベルが大きい数字であれば、より多くのセキュリティアップデートがあったことを示しています。

 したがって、Java SE 9のリリース時のバージョン番号は「9.0.0」となります。MinorとSecurityが共に0なので、バージョン番号を9としてもかまいません。

 また、バージョン文字列はバージョン番号にビルド番号を"+"文字で組み合わせた文字列となります*1。例えば、Java SE 9のビルド番号が177であれば、9.0.0+177もしくは9+177がバージョン文字列になります。

*1 ビルド番号は省略することもできます。省略した場合、バージョン文字列はバージョン番号と同じ表記になります。