1. Javaのバージョン履歴

Java の歴史は 1991 年に始まり、 Sun のプログラマーのグループがテレビのリモコン、コーヒー メーカー、トースター、銀行カードなどの小型デバイス用の言語を作成することを決定しました。

これらのデバイスのメーカーは、製品の制御に非常に異なるプロセッサを使用していたため、特定のプロセッサまたは OS のアーキテクチャに結び付けることが非常に重要になりました。

Java の作成者は、問題を 2 つの部分に分割することを決定しました。彼らのプログラムは、特定のプロセッサ用のマシンコードではなく、特別な中間コードにコンパイルされることになります。次に、その中間コードは、仮想マシンと呼ばれる特別なプログラムによって実行されます。

ほとんどのプログラマはコンピュータをマシンと呼びます。

面白い。

C++ は Java 言語の基礎として採用され、大幅に簡素化および標準化されました。C++ で 10 通りの方法で何かを実行できる場合、Java はそのうちの 1 つだけを保持します。ある意味、それは象形文字からアルファベットへの移行に似ていました。

Java の最初のバージョンは 1996 年にリリースされました。それ以来、Java は世界中で凱旋行進を開始し、それが言語自体の進化と成長を刺激しました。現在、数百万のライブラリと数十億行のコードが Java で書かれており、Java の新しいバージョンが 6 か月ごとにリリースされています。

名前 クラス数
JDK1.0 1996年 211
JDK 1.1 1997年 477
J2SE 1.2 1998年 1,524
J2SE 1.3 2000年 1,840
J2SE 1.4 2002年 2,723
J2SE 5.0 2004年 3,279
Java SE6 2006年 3,793
Java SE 7 2011年 4,024
Java SE8 2014年 4,240
Java SE9 2017年 6,005
Java SE10 2018年 6,002
Java SE 11 2018年 4,411
Java SE12 2019年 4,433
Java SE13 2019年 4,515

Java のバージョンは定期的にリリースされましたが、プログラマにとってすべてのバージョンが同じ重要性を持っていたわけではありません。Java は、最初から最後まで進化してきました。


2.Java2

最初の大きな進歩は、JDK 1.2 のリリースで起こりました。非常に多くの革新があったため、Java の作成者はJava 2 Platform Standard Editionまたは略して J2SE 1.2 と名前を変更しました。

主な革新は次のとおりです。

  • strictfpキーワード
  • グラフィックスを操作するための Swing ライブラリ
  • Java プログラムの実行を高速化する JIT コンパイラー
  • 膨大なコレクションのセット
  • Unicode の完全サポート: 日本語、中国語、韓国語。

今日、これらのイノベーションはそれほど大きなものではないように見えますが、すべての大きなプロジェクトは小さなプロジェクトから成長します。20 年前に少数のプログラマー グループが言語を改良し続けていなかったら、Java は今日これほど普及していなかったでしょう。


3. Java 5

JDK 1.5 は 2004 年 9 月にリリースされました。また、多くの技術革新も導入されていたため、新しい名前を付けざるを得ませんでした。バージョン 1.5、1.6、および 1.7 の代わりに、5.0、6.0、および 7.0 を使用することにしました。したがって、JDK 1.5 の正式名はJava 2 Standard Edition 5.0でした。

このアップデートには、それなしでは言語のさらなる開発が不可能だったであろうものが含まれていました。

注釈。Spring や Hibernate から JUnit に至るまで、主要な最新フレームワークの半分はアノテーションに基づいて構築されています。

ジェネリック。ジェネリックは、コレクション (およびそれ以上のもの) の力を新たな高みに引き上げました。コードはよりシンプル、コンパクト、そして安全になりました。

オートボックス化/アンボックス化は、プリミティブ型とそのラッパー型の間の自動変換です。これにより、コードの作成と読み取りがはるかに簡単になり、コレクションの人気がさらに高まりました。

このforeachループは現在、プログラマーが作成するすべてのループの少なくとも半分を占めています。そしてもちろん、コレクションを扱うときにも不可欠です。

enum優れた新機能です。これにより、多くのことが美しく単純化されます。

これらがすべての革新ではありません。何百もの新しいクラスが追加されました。重要なことは、それらがまさに適切なイノベーションであり、Java の人気をさらに強力に押し上げたということです。


4. Java6

Java 6 は、多数の小さな改良と、名前の数字の 2 が廃止されたことで記憶されています。Java 6 は、もはや「Java 2 Standard Edition 6.0」ではなく、単に「Java Standard Edition 6.0」になりました。

興味深いイノベーションのいくつかを以下に示します。

Javaコンパイラ API により、コードからJava コンパイラを直接呼び出すことが可能になりました。つまり、プログラムはクラス コードを表すテキストを生成し、 Java コンパイラ APIのメソッドを呼び出してコンパイルし、すぐにコンパイルされたクラスのメソッドの呼び出しを開始できるようになります。この能力が生活を大幅に簡素化する開発分野全体が存在します。

Java プログラム内でJavaScript を直接実行できるようになりました。この機能は、JavaSE 6 に Rhino JavaScript エンジンが含まれていたために登場しました。


5. Java 7

Java 7 は 2011 年 7 月にリリースされました。Java 7 には多くの改良点が加えられるはずでしたが、プログラマーは計画されていたもののほんの一部しか追加できませんでした。特に、次のような内容が追加されました。

データの入出力を操作するための新しいライブラリ。新しい入出力 APIとして知られるこの APIは、パッケージ内にありますjava.nio

Java コンパイラのコンパイル時の自動型推論により、プログラマが記述するコードの量が減ります。コンパイラはより賢くなったが、それはほんの始まりにすぎなかった。

switch ステートメントでは、文字列を case 値として使用できるようになりました。

自動リソース管理も大幅に改善されました。このtry-with-resources構造を使用すると、Java プログラムはデータ ストリームが不要になったときに閉じることができます。

他にも多くの変更がありましたが、Java を学習する現在の段階ではそれほど重要ではありません。


6. Java 8

Java 8 は 2014 年 3 月にリリースされ、Java の最近の最も強力なアップデートでした。

何よりも、ラムダ式と関数インターフェイス (アノテーション@FunctionalInterface) が追加されたことでプログラマーに記憶されています。レベル 21 でそれらを検査します。コードは二度と同じになることはありません。

コレクション用のストリームも追加され、ラムダ式と組み合わせることで、よりコンパクトにコードを作成できるようになりました。ただし、必ずしも読みやすくなるとは限りません。

面白い。

3 番目の大きな変更は、Java 8 で日付と時刻を操作するためのまったく新しい API、Date Time APIが導入されたことです。近いうちに勉強してみます。


7. Java9

Java 9 は 2017 年 9 月にリリースされました。それ以来、Java の作成者は新しいバージョンをより頻繁に (6 か月ごとに) リリースすることにしました。おそらく、Google Chrome ブラウザの開発者が採用したアプローチに感銘を受けたのでしょう。

Java 9 リリースでは、Java マシンの内部にさらに焦点が当てられました。これが一般のプログラマにもたらした最も重要なことは、プログラムをモジュールに分割できる機能でした。これは、数万のクラスがある場合、またはコードがプラグインを動的にアンロードする場合に非常に便利です。

しかし、近い将来、それはおそらくほとんど役に立たなくなるでしょう。


8. Java 11

Java 9 のリリースから 6 か月後に Java 10 がリリースされ、さらに 6 か月後に Java 11 がリリースされました。

この間に多くの小さな改良が加えられましたが、おそらく覚えているのは次の 2 つだけでしょう。

Unicode 10 のサポートが追加されました。Java プログラムで絵文字を使用できるようになりました。これらは、ブール型を操作するのと同じ方法で操作できます。

型推論が改善され、きっと気に入っていただけるvarキーワードが登場しました。

これで、次のように書くことができます。

var str = "Hello";

そしてコンパイラはこれを次のように変換します。

String str = "Hello";

しかし、いくつかの損失もありました。Java の作成者は、JavaFX、Java EE、CORBA などのライブラリを JDK 11 から削除しました。


9. 互換性の重要性

新しいバージョンがリリースされると、プログラマーは多くの場合、最初から始めたいと考えます。結局のところ、コードが最初からどのように記述されるべきだったかを完全に肯定的に認識している場合、誰が古いバグを修正したいと思うでしょうか?

しかし、歴史はそのようなアプローチを支持していません。プログラマーがプログラムの新しいバージョンをリリースするたびに、ユーザーの 90% が古いバージョンを使用しています。ユーザーはプログラムの新機能を使用することも無視することもできますが、ユーザーが嫌うのは、これまでうまく機能していたものが機能しなくなることです。

プログラマーが互換性のない新しいバージョンをリリースしたため、多くの優れた製品が消滅しました。または単に大きな変更を加えたとき。たとえば、Windows 8 でスタート ボタンを廃止するというアイデアはユーザーの興味を引くものではありませんでした。Windows 10 のリリースでは、Window 8 で削除されたものの半分が復活しました。

さらに、Windows では、20 年前に Windows 95 用に書かれたプログラムや、30 年前に MS DOS 3.0 用に書かれたプログラムも実行できます。それらは動作します。これが Windows の人気が維持されている理由の 1 つです。

そして、開発者が互換性を気にしなかったら、Java はこれほど普及しなかったでしょう。Java マシンの新しいバージョン、SDK の新しいバージョン、またはクラスへの大きな変更があった場合、1996 年 1 月以降に作成されたすべての Java コードは引き続き動作します。

これは通常、何も削除せずに、新しいメソッド、クラス、パッケージを追加するだけで実現されます。このアプローチには長所と短所があります。

一方で、Java は、古く、最適ではなく、不必要なコードという形で大量の荷物を引きずっています。一方、Java 11 で書かれたプロジェクトでは、Java 5 と Java 2 で書かれたライブラリを使用する Java 8 で書かれたライブラリを常に使用できます。この寄せ集めのコードは問題なく動作します。

C++ 言語では、32 ビットと 64 ビットの両方のプラットフォーム用にコンパイルされたライブラリを同じプロジェクトで使用することはできません。charまた、あるライブラリで使用されている型が 1 バイトを使用しているのに、別のライブラリで使用されている型が 2 バイトを使用していることが突然判明すると、非常に頭が痛くなるでしょう。


10. 非推奨

そこで、Java の作成者は何も削除せず、新しいクラスとパッケージのみを追加することにしました。しかし、既存の次善のソリューションに代わる価値のある新しい選択肢があることをプログラマにどのようにして知らせるのでしょうか?

これを行うために、彼らは注釈を思いつきました@Deprecated

一部のメソッドまたはクラスが非推奨になった場合、このアノテーションがその宣言の隣に追加されます。これは、プログラマーがコードを使用することを思いとどまることを意味します。

非推奨のクラスまたはメソッドを引き続き使用することはできますが、お勧めしません。

そして、人々は推奨されていないことをどのくらいの頻度で行うのでしょうか? ほぼいつもです 🙂

多くのクラスは 20 年前から非推奨になっており、現在も使用されています。人々はそれらを使い慣れている、あるいは単に便利なだけです。ただし、いつか削除される可能性があるので、使用しない方が良いでしょう。

IntelliJ IDEA を含むすべての最新の IDE は@Deprecated注釈を処理できます。非推奨のクラスおよびメソッドの名前は、取り消し線の書式を使用して表示されます。このようなもの:

Date date = new Date();
int day = date.getDay();

非推奨クラスは非常に人気があり、コード内でよく見られるため、そのうちのいくつかをすぐに見ていきます。