ここ数年でjavaの学習を始めた方にとっては聞きなれない「java 2」というフレーズ。
今回はこのjava 2について分かりやすく解説してみたいと思います。
今回の記事は直接技術の向上に繋がるものではありませんが、知識として持っておく分には損はしないはずです。
特にここ数年の間に学習を決意された方にとってはjavaの歴史もわかるものとなっていますので、最後まで読んでみて下さい。
Java 2とは
Java 2とJavaの違いを一言で言うと、単純に「バージョンの違い」ただそれだけです。
バージョンアップというものはどんなものにも付き物ですが、Javaも当然のようにバージョンアップを繰り返しています。
そしてこのバージョンアップの途中から「Java 2」と呼ばれるようになりました。
具体的には「Java 2 SDK 1.2.2_004」というバージョン以降のものを総称してJava 2と呼んでいました。
しかし今ではJava 2が当たり前となっていますので、一般的に皆さんが使用している”Java”が既にJava 2と言うことになります。
キットとエディジョン
またよく初心者の方が間違うものとして、「Java SE」や「Java EE」と同列に「Java SDK」があると思い込みがちですが、これは間違いです。
Java SDKとは、Java開発キット(Java Development Kit)を指す言葉で、コンパイラーやアプリケーション開発に必要なツールを全て包括した物です。
この中には当然Java実行環境(JRE [ Java Runtime Environment ] )も含まれています。
それに対し、「Java SE」や「Java EE」などはエディジョンを表す言葉で、用途の違いを指します。
例えば「Java SE」は標準セット(Standard Edition)であり、「Java EE」はエンタープライズ(Enterprise Edition)と呼ばれるものです。
(※今回は「Java SE」や「Java EE」「Java ME」という3つのエディジョンに対する説明をする記事ではありませんので、これらの解説は省略します。)
よって、“Java SE JDK”もあれば”java EE JDK”もあるということになります。
Javaの節目
先ほど、Javaはバージョン毎に変化していくという説明をしましたが、ではどのバージョンで急速な変貌を遂げたのかということが重要になります。
Javaの歴史を紐解いていくような記事でもない為年代は省略しますが、次のリストを見ればJavaがどのあたりで変わったのかがわかると思います。
- JDK 1.0
- JDK 1.1
————————————– 名称がJava2へ
- J2SE 1.2
- J2SE 1.3
- J2SE 1.4
————————————– 環境が一気に変わる
- J2SE 5.0
————————————– 名称がJ2SEからJava SEに
- Java SE 6
- Java SE 7
- Java SE 8
- Java SE 9
- Java SE 10
- Java SE 11
————————————– リリースサイクルを【1回 / 半年】に変更
- Java SE 12
まずはじめに、Java2というのはJ2SE 1.2~現在までの全てのJavaを指します。
当然今現在皆さんが使用している”Java”は、否が応でも全てJava2と言うことになります。
と言うことで最初に急速な変貌を遂げた時期は、このJ2SEに名称が変わった瞬間です。
ここで現在のJava2の基礎が確定しましたが、これで終了ではありません。
J2SE 1.4の次のリリースは通常J2SE 1.5となるはずでしたが、実際にはJ2SE 5.0となりました。
この時にもJavaは急速な変貌を遂げています。
昔からJavaを使用して開発されていた方たちは恐らくこの2か所で相当な困惑を強いられたと思います。
ごく最近の変貌ではJava SE 12から、リリースサイクルが半年に1度というスパンに変更されると共に、有償化されたことでしょう。
またこの時から、リリースサイクル毎に新機能を必ず一つ以上追加するという形で公言されたため、今後は半年に1度新しい機能が追加されます。
それに伴い今まで使えたものが廃止されたりするケースも頻発するので、今後学習すべきことが増えてくると予想されます。
バージョン毎の主な変更や新機能
Javaは常に変更や新機能の追加というものがありますが、その中でも特に変わった部分について解説してみたいと思います。
Java SE 8
Java SE 8には次のような拡張が導入されました。
- ラムダ式の導入
- Date and Time API
ラムダ式はJava以外では昔から実装されていた手法ですが、JavaではJava SE 8から実装されました。
これに伴い、今までインターフェースの実装でダラダラと記述していたコードを簡潔に記述出来るようなりました。
またDate and Time APIの導入によって、要素やタイムゾーンによってデータを格納するクラスを選ぶことができ、データ保持と日付計算が一つのクラスで可能となりました。
Java SE 10
Java SE 10では次の機能が実装されました。
- ローカル変数型推論
一言で言うと宣言省略を指します。
この機能により、変数に代入される値を基にJava側で自動的に型を振り分けてくれるようになりました。
型宣言はラムダ式の記述でも省略することは可能でしたが、ローカル変数宣言時にも省略できるようになったことで記述の必要性が無くなったものが多くあります。
Java SE 12
- Switch Expressions (Preview)
- CompactNumberFormat
Java SE 12で最も偉大な新機能は何と言ってもSwitchの見直しではないでしょうか?
今まで他の言語で出来るのに何故かJavaでは扱いにくかったSwitch文に様々な改善が施されました。
例えば”case”に複数指定できるようになったり、アロー構文が使えるようになったりといった感じです。
CompactNumberFormatは、大きな数値を省略形で表記させることができます。
具体的には次のようなコードが可能です。
jshell> cnf = NumberFormat.getCompactNumberInstance(Locale.US, NumberFormat.Style.SHORT) cnf ==> java.text.CompactNumberFormat@952071d5 jshell> cnf.format(1000) $1 ==> "1K" jshell> cnf.format(1000_000) $2 ==> "1M" jshell> cnf.format(1000_000_000) $3 ==> "1B" jshell> cnf.format(1000_000_000_000L) $4 ==> "1T" jshell> cnf.format(1000_000_000_000_000L) $5 ==> "1000T"
まとめ
今回はJava 2とは一体何なのか?という部分について解説してみました。
Java 2という括りだったので技術的な解説はありませんが、こういった知識も意外と役に立つときがあります。
またJavaのリリースサイクルを知っておくことで、新機能などが追加されるタイミングを予測することができます。
それに伴って情報の収集が可能となりますので、こういった情報は出来るだけ早めに入手できるようにしておきましょう!