Java の主な特徴、エディション、変遷
Java 言語の誕生
- Java は 1991 年に Sun Microsystems の James Gosling、Patrick Naughton、Chris Warth、Ed Frank、Mike Sheridan によって開発された。
- 1991 年には Oak という名前で呼ばれていたが、1996 年に発表された 1.0.2 バージョンから Java という名前を使うようになった。
- World Wide Web の登場により、Java はコンピュータ言語設計の中でさらに活発に発展した。
- その後、2009 年に Sun Microsystems が Oracle に買収されたことで、Java の所有権も Oracle に移った。
プログラミング言語: Java
- シンプルである
- オブジェクト指向である
- 分散環境のアプリケーションに適している
- インタプリタによって実行される
- 堅牢な機能を提供する
- 安全である
- アーキテクチャ中立で移植性が高い
- 高い性能を提供する
- マルチスレッドを提供する
- 動的である
Java 言語の主な特徴
オブジェクト指向言語
Java は完全なオブジェクト指向言語である。
オブジェクト指向 とは、アプリケーションの中で扱う対象をオブジェクト、つまり物として考え、その組み合わせによって機能を作っていく方法をいう。Java だけでなく、多くのプログラミング言語がオブジェクト指向に基づいて設計されている。
つまり、Java を学ぶことで、他の言語でも活用できる汎用的な知識を得られる。
プラットフォームに依存しない
プラットフォームに依存しないプログラムを作成できる。
Java プログラムは Java 仮想マシン で動作する 中間コード に変換された後に動作する。プラットフォーム固有のネイティブコードを生成しないため、アプリケーションが特定のプラットフォームに依存しない。そのプラットフォームに対応する仮想マシンさえあれば、Java プログラムはどこでも動作する。この性質を “Write Once, Run Anywhere” という。
ガベージコレクタがメモリを自動管理
Java には ガベージコレクション(Garbage Collection) という仕組みが用意されており、使われなくなったメモリを自動的に解放してくれる。そのため、メモリの解放を忘れたからといって、原則としてメモリリークという問題は発生しない。また、開発者がメモリ解放を意識したコードを書かなくてもよいため、開発生産性が向上する。
JavaScript とは異なる言語
名前が似ているため混同されやすいが、JavaScript とはまったく異なる言語である。Java は専用の Java 仮想マシンで実行されるが、JavaScript は主にブラウザで使われる簡単なスクリプト言語である。
JVM(Java Virtual Machine)
Java バイトコードを機械語として使うコンピュータを Java 仮想マシンという。
- スタック領域(Runtime stack)
- 動的割り当てメモリ領域(Garbage Collection Heap)
- 定数 & Method 領域(Constant & Code Segment)
- Register 領域(Process Register)
Java エディションの種類
Java は目的に応じて次のエディションを提供する。
Java SE(Java Platform - Standard Edition)
- Java の基本となるエディション
- Desktop や Server で Java Application/Applet などを開発、配置、実行できる環境を提供する(Software Platform)
- Compiler、Interpreter、標準 API などを提供する
- Java SE Development Kit(JDK)
Java EE(Java Platform - Enterprise Edition)
- サーバー側開発のための企業向けエディション
- Java SE を基盤として、大規模な企業向けサーバーを構築、実行できる環境を提供する
- Web Application Server(GlassFish) と Servlet、JSP、JDBC、DataSource、JPA、JTA、JNDI、RMI、EJB、JMS など多数の API を提供する
- Java EE SDK
Java ME(Java Platform - Micro Edition)
- 組み込みシステムで使われるエディション
- 携帯電話、PDA などで動作する無線アプリケーションを開発、実行できる環境を提供する
- Compiler、Emulator、標準 API などを提供する
- Java ME SDK
Java SE は Java 言語の基本機能である API を提供するエディションである。Java EE を実行するには Java SE が必須である。Java ME は組み込みシステムでの使用を想定しており、Java SE のサブセットとは互換性がないが、最小限の機能を提供する。ここで扱うのは Java SE の機能である。
Java の変遷
次は Java SE の大まかな歴史である。
Java バージョン
| バージョン | 時期 | 主な新機能など |
|---|---|---|
| JDK ベータ | 1995 年 | |
| JDK 1.0 | 1996 年 1 月 23 日 | 初期バージョン |
| JDK 1.1 | 1997 年 2 月 19 日 | 国際化対応、JDBC API |
| J2SE 1.2 | 1998 年 12 月 8 日 | コレクションフレームワーク、Swing、リフレクション |
| J2SE 1.3 | 2000 年 5 月 8 日 | HotSpot |
| J2SE 1.4 | 2002 年 2 月 6 日 | 正規表現、ロギング、New I/O、assert |
| J2SE 5.0 | 2004 年 9 月 30 日 | ジェネリクス、オートボクシング、enum 型、拡張 for 文 |
| JavaSE 6 | 2006 年 12 月 11 日 | Unicode 正規化、JDBC 4.0 |
| JavaSE 7 | 2011 年 7 月 28 日 | try-with-resources 構文、New I/O.2、ダイヤモンド構文 |
| JavaSE 8 (LTS) | 2014 年 3 月 18 日 | ラムダ式、Stream API、Date-Time API |
| Java 9 | 2017 年 9 月 21 日 | モジュール、JShell、リアクティブストリーム |
| Java 10 | 2018 年 3 月 20 日 | ローカル変数の型推論 |
| Java 11 (LTS) | 2018 年 9 月 25 日 | HttpClient、単一 Java ファイル実行 |
| Java 12 | 2019 年 3 月 19 日 | switch 式(Preview) |
| Java 13 | 2019 年 9 月 17 日 | テキストブロック(Preview) |
| Java 14 | 2020 年 3 月 17 日 | |
| Java 15 | 2020 年 9 月 15 日 | |
| Java 16 | 2021 年 3 月 16 日 | |
| Java 17 (LTS) | 2021 年 9 月 14 日 | |
| Java 18 | 2022 年 3 月 22 日 |
5.0 はリリース当初はバージョン 1.5 と呼ばれていたが、言語仕様などが大きく変化したため、後から 5.0 に改められた。そして、5.0 までは J2SE(Java2 Platform, Standard Edition) と呼ばれていたが、6 のリリース以降は JavaSE が正式名称になった。また、バージョン番号の小数点以下の表記も廃止された。
ただし、内部的なバージョンは今でも 1.5、1.6、1.7… のように以前と同じバージョン管理を行っており、一部の表記もそうなっているため注意が必要である。