0x0b
java_about
最終更新:
0x0b
-
view
JAVA
義ではオブジェクト指向プログラミング言語Javaであり、広義ではプログラミング言語Javaのプログラムの実行環境および開発環境
プログラミング言語としてのJava、および関連する技術や設計思想、およびJava言語の実行環境としてみたJavaプラットフォーム
義ではオブジェクト指向プログラミング言語Javaであり、広義ではプログラミング言語Javaのプログラムの実行環境および開発環境
プログラミング言語としてのJava、および関連する技術や設計思想、およびJava言語の実行環境としてみたJavaプラットフォーム
拡張子 java
パラダイム 構造化・命令型・オブジェクト指向
登場時期 1995年
設計者 Java Community Process
開発者 オラクル(サン・マイクロシステムズ)
最新リリース Java Standard Edition 7 (1.7.0)(2011年7月28日(米国時間))
型付け 強い静的型付け
主な処理系 コンパイラ(JDK, OpenJDKなどのjavac, gcjなど)、バイトコードインタプリタ(JDK, JRE(サーバー用、クライアント用が存在), Microsoft VM for Java, OpenJDK など多数)
影響を受けた言語 Objective-C、Smalltalk、C++、Eiffel、C#
影響を与えた言語 C#、D
プラットフォーム Solaris、Linux、Windows、
Mac OS X、AIX、System i、
各種の組み込みシステム ほか多数
ライセンス GNU General Public License
ウェブサイト java.sun.com
パラダイム 構造化・命令型・オブジェクト指向
登場時期 1995年
設計者 Java Community Process
開発者 オラクル(サン・マイクロシステムズ)
最新リリース Java Standard Edition 7 (1.7.0)(2011年7月28日(米国時間))
型付け 強い静的型付け
主な処理系 コンパイラ(JDK, OpenJDKなどのjavac, gcjなど)、バイトコードインタプリタ(JDK, JRE(サーバー用、クライアント用が存在), Microsoft VM for Java, OpenJDK など多数)
影響を受けた言語 Objective-C、Smalltalk、C++、Eiffel、C#
影響を与えた言語 C#、D
プラットフォーム Solaris、Linux、Windows、
Mac OS X、AIX、System i、
各種の組み込みシステム ほか多数
ライセンス GNU General Public License
ウェブサイト java.sun.com
Javaは、従来のさまざまな言語の良い部分を引き継ぎ、欠点を克服するよう設計された。次のような特徴をもつ。
Javaではプラットフォームに依存しないアプリケーションソフトウェアの開発と配備を行うことができる。
Javaで開発されたソフトウェアは堅牢な実行環境(仮想マシン)であるJava仮想マシンのもとで動作する。
オブジェクト指向プログラミングの考え方に基づいて設計された言語であり、ソフトウェアの開発と保守の複雑さを低減し、開発効率と保守性を高める。
Smalltalk や Objective-C と同様な簡潔なオブジェクトモデルを採用している。
構文は C および C++ から多くを引き継いでいる。
現在、Javaの技術は、情報技術のローエンドからハイエンドまで幅広く使われている。 組み込みシステムや携帯機器(携帯電話・PHSやPDA・スマートフォン等)のシステムから、企業の情報システムを担う大規模なサーバやスーパーコンピュータまで、非常に多くの分野で活用されている。
プログラムの実行は、各クラスが実体化したオブジェクト群が相互にメッセージをやりとりしながら行われる
Javaでは、継承については実装の単一継承を採用している。ただし1つのクラス(オブジェクト)は複数のインタフェースを実装できる。Javaで扱うデータ/オブジェクトの型(データ型)は、強い静的型付けを採用している。Javaのコンパイラおよび実行環境が、型同士の整合性を検査することによって、プログラムが正しく記述されていることや、安全に動作することの検証が、可能である。
Javaは例外処理機構を備えており、プログラム実行中に生じた異常(例外)の扱いを、比較的安全な方法で行い、プログラムを読みやすく記述することができる。
Javaでは簡潔なメモリモデルを採用しており、プログラマがメモリ (主記憶装置) を管理する負担を軽減する。あらゆるオブジェクトはメモリ内のヒープという領域に割り当てられる。メモリ管理は、Java仮想マシンに統合されたガベージコレクションの機能によって行われる。従来のオブジェクト指向プログラミング言語である C++ では、ヒープ領域に生成したオブジェクトについて、もはや必要が無くなった時に破棄する指示を、プログラマが自分で責任をもって行わなければならなかった。これは、C++ プログラマにとっては負担が大きく複雑で間違えやすい作業であり、ソフトウェアの安全性・開発効率・保守性を損なう要因だった。Javaではガベージコレクションの機能があるため、このようなことは無く、プログラマの負担は大きく軽減される。
Javaの文法は、CおよびC++から多くを引き継いでいる。また、C/C++には存在する低水準領域を操作できるポインタという機構は排除されていると言われているが、Javaの開発者も言っているように、C/C++のポインタモデルとは異なるがJavaにもポインタモデルが存在する。たとえば、クラスインスタンスと配列はポインタを使用している。これは、"ClassName a = new ClassName();"と"ClassName b;"を定義し"b = a"とすることにより、bはaのフィールドを操作できる。すなわち、a,bにはアドレスが設定されている。同様にして、配列名に格納されるのもアドレスである。このように、インスタンス名(上記のaやb)には、バージョン1.2以前はオブジェクトハンドル(ポインタのポインタ)、バージョン1.3以降はポインタが設定されている。よって、Javaは当初から現在までポインタとは切っても切れない関係にある。これについては、Javaのホワイトペーパー[1]に「C/C++とJavaの最大の違いは、Javaには、メモリへの上書きおよびデータ喪失の可能性を排除するポインタモデルがあることである。そこでは、ポインタ演算の替りに真の配列が用意されており、添字チェックを可能としている。なお、任意の整数をポインタに型変換することは、不可能である。」と解説されている。
Javaではプラットフォーム非依存を目標の一つとし、またバージョン間の互換性に注意して開発が進められている。Java技術を使うことで、プラットフォームに依存しないアプリケーションソフトウェアの開発と配備を行うことができる。従来のプログラミング言語の多くはプラットフォーム (CPU) に依存したネイティブなコードにコンパイルすることを前提として設計されていたが、Javaはこうした言語と異なり、中間言語(バイトコード)にコンパイルされ、Java仮想マシンで実行されるよう設計された。多くの場合、ジャストインタイムコンパイル方式が使われる。
プラットフォーム非依存とバージョン間の互換性の目標は、完全に達成できたわけではなく課題が残っている。
Javaではスレッドを言語仕様で規定しており、マルチスレッドによる並行計算を、従来の言語と比べて簡単に実装することができる。なお並行計算は、複数の処理を同時に実行する処理形態である。またスレッドは、プロセスより小さく軽量な処理の単位である。
Javaでは充実したライブラリにより、コンピュータネットワークを活用するソフトウェアを、効率良く開発することができる。Javaはその初期のバージョンから、TCP/IPのライブラリを備えていた。分散オブジェクト環境 (Java RMI, CORBA) のソフトウェアの開発も早い時期からできるようになっていた。近年では、さまざまなネットワークプロトコルの高水準なライブラリが使えるようになっている。充実したネットワーク機能と次に述べるXML文書を扱う機能を有効に組み合わせることにより、これまでにない高度なシステムの構築ができる言語の一つである。
XML文書を扱う機能も早期に実用化された。XMLは、広く普及している構造化文書の技術である。近年では、XMLプロセサとXSLTプロセサがJava標準ライブラリに統合され提供されている。
Javaはセキュリティを考慮して設計されており、サンドボックスモデルに基づいたセキュリティ機構を備えている。セキュリティ機構を正しく実装したJava実行環境を適切に使うことで、遠隔のコンピュータ上にある実行コードを安全に実行することができる(Javaアプレット)。
また、名前空間の機構をもつ言語であり、ライブラリおよびアプリケーションに含まれる多数のJavaのプログラム(クラスとインタフェース)は、パッケージという階層構造で管理することができる。
Javaに対しては批判も少なくない。いくつかの批判に対しては、サンやJCPに参加する人々の努力により、Javaの改良が行われている。一方で現在、多くのソフトウェア開発者は、Javaについて、広く使われている言語としては優れた技術の一つと評価している。
JavaScript (ECMAScript) は、Javaとは直接の関係は無いが、Javaと似た言語名称と構文を持っている。
表記はJのみが大文字の「Java」が正しい。「JAVA」は正式な表記ではない
近くのコーヒーショップで供されていたコーヒーのブランドに由来すると考える人が多い。その根拠は、Java のクラスファイル(中間言語のバイトコード)の最初の4バイトが十六進記数法で必ず 0xCAFEBABE となっている事である。諸々JAVAの語源には説がある
Javaではプラットフォームに依存しないアプリケーションソフトウェアの開発と配備を行うことができる。
Javaで開発されたソフトウェアは堅牢な実行環境(仮想マシン)であるJava仮想マシンのもとで動作する。
オブジェクト指向プログラミングの考え方に基づいて設計された言語であり、ソフトウェアの開発と保守の複雑さを低減し、開発効率と保守性を高める。
Smalltalk や Objective-C と同様な簡潔なオブジェクトモデルを採用している。
構文は C および C++ から多くを引き継いでいる。
現在、Javaの技術は、情報技術のローエンドからハイエンドまで幅広く使われている。 組み込みシステムや携帯機器(携帯電話・PHSやPDA・スマートフォン等)のシステムから、企業の情報システムを担う大規模なサーバやスーパーコンピュータまで、非常に多くの分野で活用されている。
プログラムの実行は、各クラスが実体化したオブジェクト群が相互にメッセージをやりとりしながら行われる
Javaでは、継承については実装の単一継承を採用している。ただし1つのクラス(オブジェクト)は複数のインタフェースを実装できる。Javaで扱うデータ/オブジェクトの型(データ型)は、強い静的型付けを採用している。Javaのコンパイラおよび実行環境が、型同士の整合性を検査することによって、プログラムが正しく記述されていることや、安全に動作することの検証が、可能である。
Javaは例外処理機構を備えており、プログラム実行中に生じた異常(例外)の扱いを、比較的安全な方法で行い、プログラムを読みやすく記述することができる。
Javaでは簡潔なメモリモデルを採用しており、プログラマがメモリ (主記憶装置) を管理する負担を軽減する。あらゆるオブジェクトはメモリ内のヒープという領域に割り当てられる。メモリ管理は、Java仮想マシンに統合されたガベージコレクションの機能によって行われる。従来のオブジェクト指向プログラミング言語である C++ では、ヒープ領域に生成したオブジェクトについて、もはや必要が無くなった時に破棄する指示を、プログラマが自分で責任をもって行わなければならなかった。これは、C++ プログラマにとっては負担が大きく複雑で間違えやすい作業であり、ソフトウェアの安全性・開発効率・保守性を損なう要因だった。Javaではガベージコレクションの機能があるため、このようなことは無く、プログラマの負担は大きく軽減される。
Javaの文法は、CおよびC++から多くを引き継いでいる。また、C/C++には存在する低水準領域を操作できるポインタという機構は排除されていると言われているが、Javaの開発者も言っているように、C/C++のポインタモデルとは異なるがJavaにもポインタモデルが存在する。たとえば、クラスインスタンスと配列はポインタを使用している。これは、"ClassName a = new ClassName();"と"ClassName b;"を定義し"b = a"とすることにより、bはaのフィールドを操作できる。すなわち、a,bにはアドレスが設定されている。同様にして、配列名に格納されるのもアドレスである。このように、インスタンス名(上記のaやb)には、バージョン1.2以前はオブジェクトハンドル(ポインタのポインタ)、バージョン1.3以降はポインタが設定されている。よって、Javaは当初から現在までポインタとは切っても切れない関係にある。これについては、Javaのホワイトペーパー[1]に「C/C++とJavaの最大の違いは、Javaには、メモリへの上書きおよびデータ喪失の可能性を排除するポインタモデルがあることである。そこでは、ポインタ演算の替りに真の配列が用意されており、添字チェックを可能としている。なお、任意の整数をポインタに型変換することは、不可能である。」と解説されている。
Javaではプラットフォーム非依存を目標の一つとし、またバージョン間の互換性に注意して開発が進められている。Java技術を使うことで、プラットフォームに依存しないアプリケーションソフトウェアの開発と配備を行うことができる。従来のプログラミング言語の多くはプラットフォーム (CPU) に依存したネイティブなコードにコンパイルすることを前提として設計されていたが、Javaはこうした言語と異なり、中間言語(バイトコード)にコンパイルされ、Java仮想マシンで実行されるよう設計された。多くの場合、ジャストインタイムコンパイル方式が使われる。
プラットフォーム非依存とバージョン間の互換性の目標は、完全に達成できたわけではなく課題が残っている。
Javaではスレッドを言語仕様で規定しており、マルチスレッドによる並行計算を、従来の言語と比べて簡単に実装することができる。なお並行計算は、複数の処理を同時に実行する処理形態である。またスレッドは、プロセスより小さく軽量な処理の単位である。
Javaでは充実したライブラリにより、コンピュータネットワークを活用するソフトウェアを、効率良く開発することができる。Javaはその初期のバージョンから、TCP/IPのライブラリを備えていた。分散オブジェクト環境 (Java RMI, CORBA) のソフトウェアの開発も早い時期からできるようになっていた。近年では、さまざまなネットワークプロトコルの高水準なライブラリが使えるようになっている。充実したネットワーク機能と次に述べるXML文書を扱う機能を有効に組み合わせることにより、これまでにない高度なシステムの構築ができる言語の一つである。
XML文書を扱う機能も早期に実用化された。XMLは、広く普及している構造化文書の技術である。近年では、XMLプロセサとXSLTプロセサがJava標準ライブラリに統合され提供されている。
Javaはセキュリティを考慮して設計されており、サンドボックスモデルに基づいたセキュリティ機構を備えている。セキュリティ機構を正しく実装したJava実行環境を適切に使うことで、遠隔のコンピュータ上にある実行コードを安全に実行することができる(Javaアプレット)。
また、名前空間の機構をもつ言語であり、ライブラリおよびアプリケーションに含まれる多数のJavaのプログラム(クラスとインタフェース)は、パッケージという階層構造で管理することができる。
Javaに対しては批判も少なくない。いくつかの批判に対しては、サンやJCPに参加する人々の努力により、Javaの改良が行われている。一方で現在、多くのソフトウェア開発者は、Javaについて、広く使われている言語としては優れた技術の一つと評価している。
JavaScript (ECMAScript) は、Javaとは直接の関係は無いが、Javaと似た言語名称と構文を持っている。
表記はJのみが大文字の「Java」が正しい。「JAVA」は正式な表記ではない
近くのコーヒーショップで供されていたコーヒーのブランドに由来すると考える人が多い。その根拠は、Java のクラスファイル(中間言語のバイトコード)の最初の4バイトが十六進記数法で必ず 0xCAFEBABE となっている事である。諸々JAVAの語源には説がある
ウェブ(クライアント側)
ウェブブラウザでJavaアプレットを実行する技術は、広く使われている。Javaアプレットは、ブラウザ(ウェブのクライアント側)がウェブページ内でアニメーションの表示やマウスによるインタラクティブな操作を可能とする技術である。ただし、いくつかの有力な競合技術も存在する。近年では、Yahoo! Games やビデオプレイヤーなどのアプリケーションで、Javaアプレットを採用する事例が多い。
かつては、Javaアプレットを使用したサイトを表示すると、数十秒~数分間操作を受け付けないブラウザが存在した。近年は、JavaおよびJavaアプレットの技術の向上により、環境によって動作が異なったり、実行速度、特に画面の描画が遅いという問題が解消されつつある。
簡単でインタラクティブなアニメーション用には、Javaアプレットよりも GIF89a や Adobe Flash を採用する事例が多い。この分野においては、最近では Ajax も普及しつつある。
ウェブブラウザでJavaアプレットを実行する技術は、広く使われている。Javaアプレットは、ブラウザ(ウェブのクライアント側)がウェブページ内でアニメーションの表示やマウスによるインタラクティブな操作を可能とする技術である。ただし、いくつかの有力な競合技術も存在する。近年では、Yahoo! Games やビデオプレイヤーなどのアプリケーションで、Javaアプレットを採用する事例が多い。
かつては、Javaアプレットを使用したサイトを表示すると、数十秒~数分間操作を受け付けないブラウザが存在した。近年は、JavaおよびJavaアプレットの技術の向上により、環境によって動作が異なったり、実行速度、特に画面の描画が遅いという問題が解消されつつある。
簡単でインタラクティブなアニメーション用には、Javaアプレットよりも GIF89a や Adobe Flash を採用する事例が多い。この分野においては、最近では Ajax も普及しつつある。
ウェブ(サーバ側)
現在、ウェブのサーバ側において、Java技術 (Java EE) は広く使われている。多くのウェブサイトが、Javaサーブレット (Java Servlet) や JSP(JavaServer Pages)などの Java EE 技術を使って動的にページを生成するウェブを構築している。Javaサーブレットは2000年前後から急速に広く使われるようになり、現在では多くのウェブアプリケーション(動的なウェブページ)がサーブレットとして稼動するようになっている。
サン・マイクロシステムズが開発したJavaサーブレット技術を簡単に説明する。必ずしも厳密な説明ではない。
Java の実行環境のプロセス(サーブレットコンテナ)を起動して1.ウェブサーバのマシンに常駐させる。
2.ウェブサーバが、ウェブブラウザからアクセスされる(リクエストを受ける)。
3.ウェブサーバは、そのリクエストをサーブレットコンテナに渡す。
4.サーブレットコンテナで動くJavaプログラム(Javaサーブレット)は、受け取ったリクエストに基づき、ウェブページを動的に生成する。
5.サーブレットコンテナは、サーブレットが生成したウェブページをウェブサーバに渡す。
6.ウェブサーバは、サーブレットコンテナから受け取ったウェブページを、ウェブブラウザに返す。
サンがJavaサーブレット技術を開発した1990年代末当時、ウェブアプリケーションの開発には、次に述べるようないくつかの問題があった。
ウェブアプリケーション(動的なウェブページ)を記述するには--CGIを用いるか、MicrosoftのIISによるActive Server Pages (ASP) を用いるのが大半だった。
現在、ウェブのサーバ側において、Java技術 (Java EE) は広く使われている。多くのウェブサイトが、Javaサーブレット (Java Servlet) や JSP(JavaServer Pages)などの Java EE 技術を使って動的にページを生成するウェブを構築している。Javaサーブレットは2000年前後から急速に広く使われるようになり、現在では多くのウェブアプリケーション(動的なウェブページ)がサーブレットとして稼動するようになっている。
サン・マイクロシステムズが開発したJavaサーブレット技術を簡単に説明する。必ずしも厳密な説明ではない。
Java の実行環境のプロセス(サーブレットコンテナ)を起動して1.ウェブサーバのマシンに常駐させる。
2.ウェブサーバが、ウェブブラウザからアクセスされる(リクエストを受ける)。
3.ウェブサーバは、そのリクエストをサーブレットコンテナに渡す。
4.サーブレットコンテナで動くJavaプログラム(Javaサーブレット)は、受け取ったリクエストに基づき、ウェブページを動的に生成する。
5.サーブレットコンテナは、サーブレットが生成したウェブページをウェブサーバに渡す。
6.ウェブサーバは、サーブレットコンテナから受け取ったウェブページを、ウェブブラウザに返す。
サンがJavaサーブレット技術を開発した1990年代末当時、ウェブアプリケーションの開発には、次に述べるようないくつかの問題があった。
ウェブアプリケーション(動的なウェブページ)を記述するには--CGIを用いるか、MicrosoftのIISによるActive Server Pages (ASP) を用いるのが大半だった。
- CGI はその特性から実行時のオーバーヘッドが高く、性能を向上することが難しかった。
- ASP はサーバが高価な Microsoft Windows NT Server である必要があった。
Javaサーブレットはこれらの問題をある程度解決することができる技術だった。
デスクトップにおける展開
デスクトップ環境においては、スタンドアロンのJava (Java SE) のアプリケーションソフトウェア(Javaアプリケーション)は、これまではあまり多く使われていなかったが、近年はいくつかのソフトウェアが広く使われるようになっている。近年になって使われるようになってきた理由としては、次のことが挙げられる。
デスクトップ環境においては、スタンドアロンのJava (Java SE) のアプリケーションソフトウェア(Javaアプリケーション)は、これまではあまり多く使われていなかったが、近年はいくつかのソフトウェアが広く使われるようになっている。近年になって使われるようになってきた理由としては、次のことが挙げられる。
- コンピュータの処理性能が急速に向上してきた。
- Javaの仮想マシン(Java仮想マシン、Java VM)とJavaコンパイラが大きく改良されてきた。
- 使い勝手の良いJavaのデスクトップアプリケーションを簡単に開発できる強力な開発環境が、オープンソース界と商用開発企業の双方からさまざまに提供されるようになってきた。
広く使われているJavaのソフトウェアとしては、NetBeansおよびEclipse SDKの統合開発環境や、LimeWireやAzureusのようなファイル共有クライアントのソフトウェアなどがある。また数学ソフトウェアMATLABにおいても、ユーザインタフェースのレンダリングと計算機能の一部を実現するために使われている。多くの Java のSwingやSWTのウィジェット・ツールキットを使ったアプリケーションが、現在も開発されている。
このように、近年はデスクトップ上でJavaアプリケーションを使う事例が増えつつあるものの、従来は次に述べるいくつかの理由のためにあまり使われてこなかった
Javaアプリケーションは、Java実行環境のオーバーヘッドのため、ネイティブアプリケーションと比べて、大量のメモリを使うことが多い。
グラフィカルユーザインタフェース (GUI) は実行対象となるプラットフォーム特有のヒューマンインタフェースガイドライン (HIG) を考慮しない傾向があった。HIG を考慮したアプリケーションを開発することによって、ユーザはアプリケーションをすぐに使い慣れることができる。また、デフォルトではフォントスムーシングが使えない。そのためユーザインタフェースの文字列(テキスト)の表示の品質が低くなってしまう。
このように、近年はデスクトップ上でJavaアプリケーションを使う事例が増えつつあるものの、従来は次に述べるいくつかの理由のためにあまり使われてこなかった
Javaアプリケーションは、Java実行環境のオーバーヘッドのため、ネイティブアプリケーションと比べて、大量のメモリを使うことが多い。
グラフィカルユーザインタフェース (GUI) は実行対象となるプラットフォーム特有のヒューマンインタフェースガイドライン (HIG) を考慮しない傾向があった。HIG を考慮したアプリケーションを開発することによって、ユーザはアプリケーションをすぐに使い慣れることができる。また、デフォルトではフォントスムーシングが使えない。そのためユーザインタフェースの文字列(テキスト)の表示の品質が低くなってしまう。
- Java開発キット (JDK) として無償で提供される基本的な開発環境は、使い勝手の良いデスクトップアプリケーションを簡単に開発するには、力不足だった。
近年では先述したとおり、使い勝手の良いJavaのデスクトップアプリケーションを簡単に開発できる強力なツールが、オープンソース/商用ともに提供され使えるようになっている。
- Java実行環境 (JRE) はこれまで数度のメジャーバージョンアップを経ており、複数のバージョンが存在する。ユーザはJavaアプリケーションを使い始める際には、必要に応じて、そのアプリケーションが動くバージョン、もしくはそのバージョンより新しいバージョンのJava実行環境をインストールする必要があった。--Java実行環境は、7MB 以上のサイズであり、そのダウンロードとインストールもやや不便な手順をふむ必要があった。
- 近年では Java Web Startの登場によりダウンロードとインストールも自動化され、ブラウザでJavaアプリケーションを見つけるとクリック一回でJREのダウンロード、インストール、アップデートなどをその場で済ませて Java Web Start 対応Swingアプリケーション実行が可能になっている。
一部のソフトウェア開発者は、情報技術はウェブを基盤としたモデルが主流となっており、スタンドアロンアプリケーションは流行遅れであり、新しいプログラミング技術は優れたウェブアプリケーションを開発することに充てられている、と思っていた。この見解については、ソフトウェア技術者の間で賛否が分かれている。
現在では、リッチクライアントやWeb 2.0の登場により新たなパラダイムが生まれようとしている。すなわちウェブを基盤としたウェブアプリケーションとスタンドアロンアプリケーションの融合である。ウェブアプリケーションをAjaxや Java Web Start、Adobe Flash などと組み合わせることにより、Web2.0時代に見合ったより洗練されたアプリケーションを開発することができる。
現在では、リッチクライアントやWeb 2.0の登場により新たなパラダイムが生まれようとしている。すなわちウェブを基盤としたウェブアプリケーションとスタンドアロンアプリケーションの融合である。ウェブアプリケーションをAjaxや Java Web Start、Adobe Flash などと組み合わせることにより、Web2.0時代に見合ったより洗練されたアプリケーションを開発することができる。
パーソナルコンピュータにおける実行環境
現在、ほとんどの パーソナルコンピュータ (PC) のユーザは、何ら問題なくウェブおよびデスクトップ環境上でJavaアプリケーションを実行できる。多くのPCメーカーは、自分たちが製造・販売する Windows PCにJava実行環境 (JRE) を同梱している。アップルの Mac OS X や、多くのLinuxディストリビューションでも、Java実行環境を同梱している。そのため、マイクロソフトが2001年頃以降にJava実行環境をWindowsに同梱していないことの影響は小さい。
2001年頃にマイクロソフトによるJava実行環境をWindowsに同梱することを止めたという行動は、サン・マイクロシステムズが同社を「品質の低い」Java実行環境を同梱してきたとして告訴したことが契機となった。マイクロソフトがそれまでWindowsに同梱してきたJava実行環境向けに開発されたJavaプログラムは、他のプラットフォームのJava実行環境で動かない可能性があった。
しかし近年では、Javaアプリケーションパッケージ自体にJava実行環境を同梱する事例が少なくない。その背景にはJavaアプリケーション開発者の判断がある。Javaアプリケーションが想定どおりに機能するよう、Java実行環境のバージョンの違いによる非互換性に基づく不具合を避けるために、PCに同梱されているJava実行環境を使わないという判断である。
現在では、Javaアプレットは動作対象のJava実行環境のバージョンを認識することができる。また、バージョン間の互換性も プログラミング言語の中では高い水準にあり、上位互換性については java SE 1.3 以降は大きな問題はほぼおきにくくなっている。さらに Java Web Start ではデスクトップにインストールされているJavaのバージョンを確認してアップデートできるならアップデートし、それだけでなく Java Web Start 対応アプリケーションをもアップデートしようとする。そのため古いバージョンのJava実行環境を使っているマシンがあったとしても、自動アップデートされるためにそう難しい問題は起きない。
現在、ほとんどの パーソナルコンピュータ (PC) のユーザは、何ら問題なくウェブおよびデスクトップ環境上でJavaアプリケーションを実行できる。多くのPCメーカーは、自分たちが製造・販売する Windows PCにJava実行環境 (JRE) を同梱している。アップルの Mac OS X や、多くのLinuxディストリビューションでも、Java実行環境を同梱している。そのため、マイクロソフトが2001年頃以降にJava実行環境をWindowsに同梱していないことの影響は小さい。
2001年頃にマイクロソフトによるJava実行環境をWindowsに同梱することを止めたという行動は、サン・マイクロシステムズが同社を「品質の低い」Java実行環境を同梱してきたとして告訴したことが契機となった。マイクロソフトがそれまでWindowsに同梱してきたJava実行環境向けに開発されたJavaプログラムは、他のプラットフォームのJava実行環境で動かない可能性があった。
しかし近年では、Javaアプリケーションパッケージ自体にJava実行環境を同梱する事例が少なくない。その背景にはJavaアプリケーション開発者の判断がある。Javaアプリケーションが想定どおりに機能するよう、Java実行環境のバージョンの違いによる非互換性に基づく不具合を避けるために、PCに同梱されているJava実行環境を使わないという判断である。
現在では、Javaアプレットは動作対象のJava実行環境のバージョンを認識することができる。また、バージョン間の互換性も プログラミング言語の中では高い水準にあり、上位互換性については java SE 1.3 以降は大きな問題はほぼおきにくくなっている。さらに Java Web Start ではデスクトップにインストールされているJavaのバージョンを確認してアップデートできるならアップデートし、それだけでなく Java Web Start 対応アプリケーションをもアップデートしようとする。そのため古いバージョンのJava実行環境を使っているマシンがあったとしても、自動アップデートされるためにそう難しい問題は起きない。
組み込みシステム
組み込みシステム向けの Java (Java ME) も広く使われている。
携帯機器(携帯電話・PHSやPDA・スマートフォン等)にJavaの実行環境が実装されるケースが多い。Java環境はこれら携帯機器全般に広く普及している。一方、 Symbian および BREW は携帯電話や(日本的定義での)スマートフォンを主なターゲットとし、Javaと競合している。
Java MEでは、BREWとは異なり、開発者がライセンス料を支払わずに、プログラムを開発することができる。Java MEはSymbianより広く普及している。その理由は、Java MEがSymbianより広範な携帯機器、特に廉価なモデルで動作するからである。こうした事情からサードパーティによりOpera miniのようなフリーのJavaソフトウェアを開発することができるようになった。
携帯機器のJava MEプログラムは、サンドボックスのもとで動くため、多くの開発者が特別な配慮をせずにプログラムを開発しても、安全に実行できる。携帯機器のJava技術が多様化するに伴い、異なるメーカーの携帯機器でもJavaプログラムが動くよう、携帯機器のためのJava技術の標準が必要となった。携帯機器のためのJava MEの標準がMobile Information Device Profile (MIDP) である。最初の標準はMIDP 1で、小さい画面を想定したものであり、音声機能は無く、プログラムサイズは32kBまでという制限があった。後のMIDP 2の標準では、音声機能を備え、プログラムサイズの制限は64kBまでと緩和された。携帯機器の設計の進歩は標準化よりも急速であるため、一部のメーカーは、MIDP 2標準の最大プログラムサイズなどいくつかの制限を、意図的に緩和して携帯機器を開発している。
携帯機器におけるJava MEの競合技術について簡単に述べる。
組み込みシステム向けの Java (Java ME) も広く使われている。
携帯機器(携帯電話・PHSやPDA・スマートフォン等)にJavaの実行環境が実装されるケースが多い。Java環境はこれら携帯機器全般に広く普及している。一方、 Symbian および BREW は携帯電話や(日本的定義での)スマートフォンを主なターゲットとし、Javaと競合している。
Java MEでは、BREWとは異なり、開発者がライセンス料を支払わずに、プログラムを開発することができる。Java MEはSymbianより広く普及している。その理由は、Java MEがSymbianより広範な携帯機器、特に廉価なモデルで動作するからである。こうした事情からサードパーティによりOpera miniのようなフリーのJavaソフトウェアを開発することができるようになった。
携帯機器のJava MEプログラムは、サンドボックスのもとで動くため、多くの開発者が特別な配慮をせずにプログラムを開発しても、安全に実行できる。携帯機器のJava技術が多様化するに伴い、異なるメーカーの携帯機器でもJavaプログラムが動くよう、携帯機器のためのJava技術の標準が必要となった。携帯機器のためのJava MEの標準がMobile Information Device Profile (MIDP) である。最初の標準はMIDP 1で、小さい画面を想定したものであり、音声機能は無く、プログラムサイズは32kBまでという制限があった。後のMIDP 2の標準では、音声機能を備え、プログラムサイズの制限は64kBまでと緩和された。携帯機器の設計の進歩は標準化よりも急速であるため、一部のメーカーは、MIDP 2標準の最大プログラムサイズなどいくつかの制限を、意図的に緩和して携帯機器を開発している。
携帯機器におけるJava MEの競合技術について簡単に述べる。
- Symbianの技術は、シンビアンが開発した携帯電話向けのユーザインタフェースフレームワークを備えたプラットフォームであり、マルチスレッド機能やメモリ保護機能をもつ。開発用言語はC++やJava MEなどである。Java と同様に、開発者がライセンス料を支払わずに、プログラムを開発することができる。
- BREWの技術は、クアルコムが開発し推進している、携帯電話向けのプラットフォームである。開発用言語は C/C++ である。Javaと異なり、プログラムを開発するために、開発者がライセンス料を支払う必要がある。BREWプログラムは、携帯電話利用者に課金する機能にアクセスすることができる。この課金機能は、クアルコムが管理する厳重な承認機能を、必要とする。この承認機能により、ライセンス料を徴収することができ、また携帯電話ごとにどの BREW プログラムが使えるかを制御することができる。BREWを採用する携帯電話事業社は、排他的なコンテンツ配布の技術を使うことができる。一部の携帯電話事業社はこのコンテンツ配布技術から利益を得ることができると考えている。
世界的な動向としては、
- GSMの方式を採用するほとんどの携帯電話事業社は、Javaを採用する傾向がある。
- CDMAの方式を採用する携帯電話事業社の多くは、BREWを採用する傾向がある。ただし例外的に、CDMA式を採用するアメリカ合衆国の携帯電話事業者 Sprint Nextel Corporation は、Javaを採用している。
- Symbian のスマートフォンは、スマートフォン市場で85%を占有している。
- Javaの実装は携帯機器(携帯電話・PHSやPDA・スマートフォン等)に広く普及している。
また、2001年にはソニーのコンシューマゲーム機 PlayStation2 にJava 仮想マシンが搭載される予定と発表され話題になった。
クラスライブラリなどを含めた、Javaバイトコードの実行環境と開発環境(広義のJava)については、Javaプラットフォーム
言語の文法に関してはJavaの文法
バージョン
JDK 1.0(1996年1月23日)
JDK 1.1(1997年2月19日)
J2SE 1.2(1998年12月8日)
J2SE 1.3(2000年5月8日)
J2SE 1.4 (2002年2月6日)
J2SE 5.0(2004年9月30日)
Java SE 6(2006年12月11日)
Java SE 6 Update 10
Java SE 7(2011年7月28日)
Java SE 8
JDK 1.0(1996年1月23日)
JDK 1.1(1997年2月19日)
J2SE 1.2(1998年12月8日)
J2SE 1.3(2000年5月8日)
J2SE 1.4 (2002年2月6日)
J2SE 5.0(2004年9月30日)
Java SE 6(2006年12月11日)
Java SE 6 Update 10
Java SE 7(2011年7月28日)
Java SE 8