削除された内容 追加された内容
編集の要約なし
(同じ利用者による、間の3版が非表示)
35行目:
== 特徴 ==
=== Javaの理念 ===
{{出典の明記|section=1|date=2019年2月}}<!-- URLが記載されていないので検証不可能。[[Wikipedia:検証可能性]] -->
Javaは以下の5つの理念に基づいて開発された<ref>"1.2 Design Goals of the Java™ Programming Language". Oracle. January 1, 1999. Archived from the original on January 23, 2013. Retrieved January 14, 2013.</ref>。
 
# 言語仕様はシンプルで、オブジェクト指向で、見慣れたものにする(''simple, object-oriented, and familiar'')
# 堅牢(エラー動作の抑止)安全(不正アクセスの防止)を重視する(''robust and secure'')
# 特定のプラットフォーム依存せずまた移植を容易にする(''architecture-neutral and portable'')
# 高いパフォーマンスで動作する(''executing with high performance'')
# インタプリタ(仮想マシン)式で、マルチスレッドで、コードを動的に再解釈できる(''interpreted, threaded, and dynamic'')
 
(1)に関しては、'''C言語'''をモデルにした構文が採用され、'''予約語を少なく'''している。'''オブジェクト指向'''はクラスベースとしたが、メッセージベースを実装できる仕様も追加された。同時にネットワーク系クラスライブラリの充実により分散オブジェクト技術にも適合した。(2)に関しては、ポインタ、アドレス直指定変数、多重継承、ジェネリクス、演算子オーバーロードなどを破棄し、強い型定義、'''例外処理、ガーベジコレクタ'''などを採用した。動作上の堅牢性は'''仮想マシン'''とセキュリティチェックを兼ねたクラスローダを根幹とし、これは同時にプログラムをサンドボックス化して基礎レベルからの安全性を確立した。(3)と(4)は、Java仮想マシンの技術に依存した。(5)に関しては、マルチスレッドの取り扱いは'''synchronized'''ブロックと3つの予約語というシンプルな設計でまとめられた。ダイナミック性は様々に解釈できるが、多重ディスパッチは'''instanceof'''演算子とダウンキャストと例外処理の活用で実装でき、動的ディスパッチは'''serializable'''インターフェースとリフレクションAPIの活用で表現できた。
=== オブジェクト指向プログラミング ===
 
=== オブジェクト指向プログラミング ===
Javaは[[クラスベース]]の[[オブジェクト指向プログラミング言語]]である。[[オブジェクト指向]]とは、現実世界をモデル化する手法のひとつであり、データ(状態)とそれに関連する振る舞い(処理)をまとめて[[オブジェクト (プログラミング)|オブジェクト]](物体)として扱う。
 
194 ⟶ 195行目:
Javaの最初のバージョンが公開されてから2000年代までの動向を、いくつかの側面から述べる。なお、Javaの開発元である[[サン・マイクロシステムズ]]はこの後の[[2010年]]1月に[[オラクル (企業)|オラクル]]により買収されており、Javaに関する権利も同社に移転している。
 
==== ウェブ(Webクライアント側) ====
Javaアプレットは、WWWブラウザで動作するJavaプログラムであり、クライアントサイドのウェブアプリケーションの実装方法のひとつとして広く使われている。いくつかの有力な競合が存在する。競合技術の代表としてMicrosoft [[ActiveX]]および[[Adobe Flash]]が挙げられるが、これらはいずれも衰退している。
 
203 ⟶ 204行目:
以上のように、ネットワーク越しにダウンロードしたアプリケーションをその場で実行する、というような場合に不可欠なのは、サンドボックスと呼ばれる一種の仮想化環境である、という事実はJavaが設計された当初から(あるいは、それ以前の先駆的な事例から)基本的に何ら変わるものではない。そのためのJava以外のものとしては、インタプリタベースのJavaScriptの他、バイトコード(あるいはネイティブコードの安全な実行<ref>アプリへの署名による安全性を強調する企業もあるが。</ref>)を指向したものとしては[[Google Native Client|NaCl (PNaCl) ]]や、[[WebAssembly]]がある。
 
==== ウェブ(Webサーバ側) ====
現在、[[World Wide Web|ウェブ]]の[[サーバ]]側において、Java技術 ([[Java Platform, Enterprise Edition|Java EE]]) は広く使われている。多くの[[ウェブサイト]]が、[[Java Servlet|Javaサーブレット]] (Java Servlet) や[[JavaServer Pages]] (JSP)<!--、[[JavaServer Faces|JSF]](JavaServer Faces)--> などのJava EE技術を使って動的にページを生成するウェブを構築している。Javaサーブレットは[[2000年]]前後から急速に広く使われるようになり、現在では多くの[[ウェブアプリケーション]](動的な[[ウェブページ]])がサーブレットとして稼動するようになっている。
 
222 ⟶ 223行目:
Javaサーブレットはこれらの問題をある程度解決することができる技術だった。
 
==== PCデスクトップにおける展開 ====
[[デスクトップ環境]]においては、[[スタンドアローン|スタンドアロン]]のJava ([[Java Platform, Standard Edition|Java SE]]) の[[アプリケーションソフトウェア]]([[Javaアプリケーション]])は、これまではあまり多く使われていなかったが、{{いつ範囲|date=2019年2月|近年}}はいくつかのソフトウェアが広く使われるようになっている。{{いつ範囲|date=2019年2月|近年}}になって使われるようになってきた理由としては、次のことが挙げられる。
 
244 ⟶ 245行目:
{{いつ範囲|date=2019年2月|現在}}では、[[リッチクライアント]]や[[Web 2.0]]の登場により新たな[[パラダイム]]が生まれようとしている。すなわち[[World Wide Web|ウェブ]]を基盤とした[[ウェブアプリケーション]]と[[スタンドアローン|スタンドアロン]]アプリケーションの融合である。ウェブアプリケーションを[[Ajax]]や [[Java Web Start]]、[[Adobe Flash]] などと組み合わせることにより、Web2.0時代に見合ったより洗練されたアプリケーションを開発することができる。
 
==== Windosw上とMS版Java ====
==== パーソナルコンピュータにおける実行環境 ====
{{いつ範囲|date=2013年1月|一昔前}}、ほとんどの [[パーソナルコンピュータ]] (PC) のユーザは、何ら問題なく[[World Wide Web|ウェブ]]および[[デスクトップ環境]]上で[[Javaアプリケーション]]を実行できていた。かつて多くのPCメーカーは、自分たちが製造・販売する[[Microsoft Windows|Windows]] PCに[[Java Runtime Environment|Java実行環境]] (JRE) を同梱していた。[[アップル (企業)|アップル]]の[[macOS]]や、多くの[[Linuxディストリビューション]]でも、Java実行環境を同梱していた。{{いつ範囲|date=2013年1月|今}}では追加インストールが必要である。しかしながらパーソナルコンピュータにおいてJavaアプリケーションは殆ど使われなくなってしまっているので、[[マイクロソフト]]が2001年頃以降にJava実行環境をWindowsに同梱していないことの影響は小さい。
 
253 ⟶ 254行目:
{{いつ範囲|date=2013年1月|現在}}では、[[Javaアプレット]]は動作対象のJava実行環境のバージョンを認識することができる。また、バージョン間の[[互換性]]も プログラミング言語の中では高い水準にあり、上位互換性についてはJava SE 1.3以降は大きな問題はほぼおきにくくなっている。さらに[[Java Web Start]]ではデスクトップにインストールされているJavaのバージョンを確認してアップデートできるならアップデートし、それだけでなくJava Web Start対応アプリケーションをもアップデートしようとする。そのため古いバージョンのJava実行環境を使っているマシンがあったとしても、自動アップデートされるためにそう難しい問題は起きない。
 
==== 組み込みシステム ====
[[組み込みシステム]]向けのJava([[Java Platform, Micro Edition|Java ME]])も広く使われている。
 
450 ⟶ 451行目:
**実行するmainメソッドをもつクラス名の指定については、[[Jar|Javaアーカイブ]] (Jar) ファイルのMANIFESTに記述する方法もある。
 
=== 例: スタンドアロン (Swing)(GUIアプリ) ===
[[グラフィカルユーザインタフェース]] (GUI) 環境で動く [[Swing]]を使った[[スタンドアローン|スタンドアロン]]の[[Javaアプリケーション]]の例を示す。Swingは、[[Java Platform, Standard Edition|Java SE]]の高度なGUIの[[ウィジェット・ツールキット]]の[[ライブラリ]]である。
 
634 ⟶ 635行目:
*ライセンス文書および各種の文書
 
==== プログラムの実行動作形態 ====
Java実行環境(JRE)に用意されているコンポーネント(クラスライブラリ)を利用する事でJavaプログラムは結果的に、デスクトップ上、モバイル上、マイクロプロセッサ上、WEBページ上、WEBクライアント上、サーバー上などのプラットフォームに特化したアプリケーションに派生する。Java開発環境(JDK)ではそのコンポーネントに対応するAPIを用いて開発する。JRE&JDKが保有するコンポーネントとAPIは、後述のエディション(版)によって異なっている。例えばサーバープログラム用のコンポーネントとAPIはエンタープライズ版にしか含まれていない。
Java の[[バイトコード]]には複数の実行形態があると考えることができる。ただしいずれのバイトコードも、[[Java Runtime Environment|Java実行環境]] (JRE) の下で実行されるという点では、同じと考えることもできる。
 
;[[Javaアプリケーション]]
:ローカルのコンピュータで実行されるJavaプログラム。
683 ⟶ 685行目:
*[[JUnit]] - Javaアプリケーションの単体テストフレームワーク。単体テストを自動化する。[[xUnit]]の一種である。[[テスト駆動開発]]を支援する。
 
=== サードパーテエデション ===
[[オラクル (企業)|オラクル]]と[[Java Community Process|JCP]]は、さまざまな環境に対応するため、3つの[[Javaプラットフォーム]]のエディションを規定している。Javaの[[アプリケーションプログラミングインタフェース|API]]の多くは分類され各エディションに割り当てられている。エディションごとに実行環境と開発環境がある。[[Java Runtime Environment|Java実行環境]] (JRE) は、[[Java仮想マシン]]と標準[[ライブラリ]]の[[実装]]から構成される。JDK 1.1のバージョンまでは、[[Java Platform, Standard Edition|Java SE]]に相当するエディションのみが提供されていた。3つのエディションが規定されたのは、JDK 1.1の次のバージョンからである。オラクル / JCPが規定しているエディションを次に示す。
広く使われている[[プラットフォーム (コンピューティング)|プラットフォーム]]などに対しては、複数の団体や企業が独自にJREやJDKの[[実装]]を開発・提供している。独自の[[最適化 (情報工学)|最適化]]技術を適用したり、特定の用途に特化した最適化、あるいは異なるライセンスを採用するなど、それぞれ特徴がある。
*[[Linux]] / [[IA-32]]プラットフォーム : [[オラクル (企業)|オラクル]]、Blackdown、[[IBM]]、Kaffe.org、GNUプロジェクトなどがJREやJDKを実装・提供している。
*[[Microsoft Windows|Windows]]/IA-32プラットフォーム : オラクル、IBMなどがJREやJDKを実装・提供している。
 
;スタンダード版(Java Platform Standard Edition)
'''オープンソース/フリーソフトウェアの実装'''
:[[Java Platform, Standard Edition|Java SE]] (Java Platform, Standard Edition) は、[[ワークステーション]]、[[パーソナルコンピュータ]]や[[サーバ]]などの機器で、汎用的な用途に使われる。
;エンタープライズ版(Java Platform Enterprise Edition)
:[[Java Platform, Enterprise Edition|Java EE]] (Java Platform, Enterprise Edition) は、Java SE に加え、多層[[クライアント・サーバ|クライアントサーバ]]の大規模システムを開発するための、さまざまな[[アプリケーションプログラミングインタフェース|API]]が追加されている。
;マイクロ版(Java Platform Micro Edition)
:[[Java Platform, Micro Edition|Java ME]] (Java Platform, Micro Edition) は、コンピュータ資源が限られている、[[組み込みシステム]]などを用途として想定したエディションである。機器の種類に応じた、ライブラリのいくつかの異なるセット(プロファイル)を規定している。Java SEのいくつかのAPIは実装していないが、このエディションで対象とする用途には十分な機能を持っている。完全なJava SEのライブラリを使うには、このエディションで対象とする用途では記憶装置の容量が足りない。
 
'''カード版(Java Card)'''
[[オラクル (企業)|オラクル]]およびいくつかの団体が、[[オープンソース]]もしくは[[フリーソフトウェア]]の[[ライセンス]]で利用できる、[[Java仮想マシン]]およびJRE 、JDKの[[実装]]を開発している。
 
:[[Javaカード|Java Card]]は、[[ICカード|ICカード(スマートカード)]]及びそれに類似の小型メモリデバイス上で運用されるプログラムを実行または開発する為のエディションである。現在ではSIMカードやATMカードなど幅広い分野に普及している。
サン / JCPはJava発表時からJava仮想マシンおよび標準ライブラリの仕様を公開しており、Java標準クラスライブラリの[[ソースコード]]もJDKの一部として提供していた。しかしソースコードの改変は下記のOpenJDKリリースまでライセンスで認めていなかった。そのため、サンの実装とは別に、オープンソースもしくはフリーソフトウェアでかつサンの実装と互換性のあるJava標準クラスライブラリとJava仮想マシンが開発された。また、2006年にサンはライセンスの方針を変更し近い将来オープンソースにする意向を表明し、[[2007年]]5月8日にJava SE 6をOpenJDKとして [[GNU General Public License]] にてリリースした<ref>{{Cite web
 
Java [[アプリケーションプログラミングインタフェース|API]] に含まれるクラスは、[[パッケージ (Java)|パッケージ]]と呼ばれるグループに分類される。各パッケージは、相互に関連する[[インタフェース (抽象型)|インタフェース]]、[[クラス (コンピュータ)|クラス]]、[[例外処理|例外]]を含む。Java の各エディションでどのような機能が使えるかについては、それぞれのエディションの項目 ([[Java Platform, Standard Edition|Java SE]], [[Java Platform, Enterprise Edition|Java EE]], [[Java Platform, Micro Edition|Java ME]]) を参照のこと。
 
JavaのAPIセットは、[[オラクル (企業)|オラクル]]と他の個人や企業・団体が共同で、[[Java Community Process|JCP]] (Java Community Process) プログラムに沿って管理している。このプロセスに参加する人々が、Java APIの設計と開発に関わっている。このプロセスのあり方については、議論の対象となっている。
 
2004年より、[[IBM]]と[[BEAシステムズ]](後に[[オラクル (企業)|オラクル]]が買収)は、Javaの公式の[[オープンソース]][[実装]]を作る動きを、公的に支援している。2006年まで、サンはこうした動きに対しては拒否する立場をとってきたが、方針を変えて自社とJCPによるJavaの実装をオープンソースにする意向を表明し実行に移し始めている。
 
=== サードパーティによる派生物 ===
'''JREとJDKのオープンソース化'''
 
[[オラクル (企業)|オラクル]]およびいくつかの団体が、[[オープンソース]]もしくは[[フリーソフトウェア]]の[[ライセンス]]で利用できる、[[Java仮想マシン]]およびJRE 、JDKの[[実装]]を開発している。サン / JCPはJava発表時からJava仮想マシンおよび標準ライブラリの仕様を公開しており、Java標準クラスライブラリの[[ソースコード]]もJDKの一部として提供していた。しかしソースコードの改変は下記のOpenJDKリリースまでライセンスで認めていなかった。そのため、サンの実装とは別に、オープンソースもしくはフリーソフトウェアでかつサンの実装と互換性のあるJava標準クラスライブラリとJava仮想マシンが開発された。また、2006年にサンはライセンスの方針を変更し近い将来オープンソースにする意向を表明し、[[2007年]]5月8日にJava SE 6をOpenJDKとして [[GNU General Public License]] にてリリースした<ref>{{Cite web
 
2006年にサンはライセンスの方針を変更し近い将来オープンソースにする意向を表明し、[[2007年]]5月8日にJava SE 6をOpenJDKとして [[GNU General Public License]] にてリリースした<ref>{{Cite web
|title = Sun Fulfills Promise of Open and Free Java Technology and Releases Java SE Platform to OpenJDK Community
|url = http://www.sun.com/aboutsun/pr/2007-05/sunflash.20070508.3.xml
698 ⟶ 716行目:
|date = 2007-5-8
|accessdate = 2009年9月16日
}}</ref>。GNU Classpathは、2007年3月<!--8日-->現在、J2SE 1.4のライブラリの99%以上を実装し[http://www.kaffe.org/~stuart/japi/htmlout/h-jdk14-classpath.html]、J2SE 5.0では95%以上を実装している[http://www.kaffe.org/~stuart/japi/htmlout/h-jdk15-classpath.html]。
}}</ref>。
また[[OpenJDK]]には[[IBM]]が協力している。
 
'''Windows / Linux用プラットフォーム'''
{{main|Java#オープンソース/フリーソフトウェア}}
 
広く使われている[[プラットフォーム (コンピューティング)|プラットフォーム]]などに対しては、複数の団体や企業が独自にJREやJDKの[[実装]]を開発・提供している。独自の[[最適化 (情報工学)|最適化]]技術を適用したり、特定の用途に特化した最適化、あるいは異なるライセンスを採用するなど、それぞれ特徴がある。
GNU Classpathは、2007年3月<!--8日-->現在、J2SE 1.4のライブラリの99%以上を実装し[http://www.kaffe.org/~stuart/japi/htmlout/h-jdk14-classpath.html]、J2SE 5.0では95%以上を実装している[http://www.kaffe.org/~stuart/japi/htmlout/h-jdk15-classpath.html]。
また[[OpenJDK]]には[[IBM]]が協力している。
 
*[[Linux]] / [[IA-32]]プラットフォーム : [[オラクル (企業)|オラクル]]、Blackdown、[[IBM]]、Kaffe.org、GNUプロジェクトなどがJREやJDKを実装・提供している。
'''GNUプロジェクトによる実装'''
*[[Microsoft Windows|Windows]]/IA-32プラットフォーム : オラクル、IBMなどがJREやJDKを実装・提供している。
 
'''GNUプロジェクトによる実装'''
[[GNUプロジェクト]]が[[GNU Interpreter for Java]]および[[GNUコンパイラコレクション]] (GCC) のJava版である[[GNU Compiler for Java]]を出している。GNU Compiler for Javaはahead-of-timeコンパイラを搭載しており、Javaのソースコードやバイトコードをネイティブマシンコード([[Microsoft Windows|Windows]]の場合はexeファイル)に変換できる。クラスライブラリは[[GNU Classpath]]を使っており、1.4のほとんどの部分が対応しており、5.0の部分も実装が進んでいる。
 
[[GNUプロジェクト]]が[[GNU Interpreter for Java]]および[[GNUコンパイラコレクション]] (GCC) のJava版である[[GNU Compiler for Java]]を出している。GNU Compiler for Javaはahead-of-timeコンパイラを搭載しており、Javaのソースコードやバイトコードをネイティブマシンコード([[Microsoft Windows|Windows]]の場合はexeファイル)に変換できる。クラスライブラリは[[GNU Classpath]]を使っており、1.4のほとんどの部分が対応しており、5.0の部分も実装が進んでいる。Windows環境では、GCJは[[MinGW]] (Minimalist GNU for Windows) もしくは[[Cygwin]]を使って実行できる。Cygwinの場合は、対象がライセンスが[[GNU General Public License|GPL]]のソフトウェアに限られるが、MinGWの場合は商用含め、すべてのソフトウェアで利用できる。
 
'''Excelsior JET'''
715 ⟶ 734行目:
米Excelsior社がExcelsior JETというahead-of-timeコンパイラを販売している[http://www.excelsior-usa.com/jet.html]。Java SE 用に書かれたプログラムを [[Microsoft Windows|Windows]]のネイティブマシンコードであるexeファイル(実行ファイル)に変換できる。起動の高速化やアプリケーションの[[難読化コード|難読化]]を実現する。
 
'''Windows exeパッケージ用実行ファイルツール'''
 
[[Microsoft Windows|Windows]]にて、配布、実行しやすくするために、Javaの[[jar]]ファイルをexeファイル(実行ファイル)でラッピングするツールがある。以下が、その一例である。
724 ⟶ 743行目:
Java Web Startには、適切なバージョンのJREをインストールする機能があるが、そもそも、JREがインストールされていない場合は、それが不可能である。JSmoothなどでは、ラッピングされたexeが、必要なJREがインストールされていないことを検出した時は、JREをダウンロードして、インストールする機能を持つ。また、上記3つすべてにおいて、JREを同梱して、同梱したJREを使ってアプリケーションを実行する機能を持つ。
 
また、通常のJavaアプリケーションでは、Windowsのタスクマネージャには、java.exeやjavaw.exeと表示され、Javaのアイコンが表示されるが、自前のexeファイル名と自前のアイコンを表示する機能を持つ。さらに、上記のいくつかは、アプリケーションの2重起動を防止したり、アプリケーションをWindowsサービス(NTサービス)化する機能を持つ。サンが特定のOSに特化した機能を提供することを嫌がっていたため、これらの機能が不足しており、それを補うために、exeパッケージ化が存在する。<!-- ただし、これらのツールには最新の[[JDK]]でコンパイルされた[[jar]]ファイルには対応していないなどの欠点もある上、{{いつ範囲|date=2019年2月|近年}}の [[Microsoft Windows|Windows]] にはほとんどにJavaがインストールされているため、あまり普及していない。 -->
 
さらに、上記のいくつかは、アプリケーションの2重起動を防止したり、アプリケーションをWindowsサービス(NTサービス)化する機能を持つ。
 
サンが特定のOSに特化した機能を提供することを嫌がっていたため、これらの機能が不足しており、それを補うために、exeパッケージ化が存在する。<!-- ただし、これらのツールには最新の[[JDK]]でコンパイルされた[[jar]]ファイルには対応していないなどの欠点もある上、{{いつ範囲|date=2019年2月|近年}}の [[Microsoft Windows|Windows]] にはほとんどにJavaがインストールされているため、あまり普及していない。 -->
 
=== エディション(SE / EE / ME) ===
[[オラクル (企業)|オラクル]]と[[Java Community Process|JCP]]は、さまざまな環境に対応するため、3つの[[Javaプラットフォーム]]のエディションを規定している。Javaの[[アプリケーションプログラミングインタフェース|API]]の多くは分類され各エディションに割り当てられている。
 
エディションごとに実行環境と開発環境がある。[[Java Runtime Environment|Java実行環境]] (JRE) は、[[Java仮想マシン]]と標準[[ライブラリ]]の[[実装]]から構成される。JDK 1.1のバージョンまでは、[[Java Platform, Standard Edition|Java SE]]に相当するエディションのみが提供されていた。3つのエディションが規定されたのは、JDK 1.1の次のバージョンからである。オラクル / JCPが規定しているエディションを次に示す。
;Java SE
:[[Java Platform, Standard Edition|Java SE]] (Java Platform, Standard Edition) は、[[ワークステーション]]、[[パーソナルコンピュータ]]や[[サーバ]]などの機器で、汎用的な用途に使われる。
;Java EE
:[[Java Platform, Enterprise Edition|Java EE]] (Java Platform, Enterprise Edition) は、Java SE に加え、多層[[クライアント・サーバ|クライアントサーバ]]の大規模システムを開発するための、さまざまな[[アプリケーションプログラミングインタフェース|API]]が追加されている。
;Java ME
:[[Java Platform, Micro Edition|Java ME]] (Java Platform, Micro Edition) は、コンピュータ資源が限られている、[[組み込みシステム]]などを用途として想定したエディションである。機器の種類に応じた、ライブラリのいくつかの異なるセット(プロファイル)を規定している。Java SEのいくつかのAPIは実装していないが、このエディションで対象とする用途には十分な機能を持っている。完全なJava SEのライブラリを使うには、このエディションで対象とする用途では記憶装置の容量が足りない。
Java [[アプリケーションプログラミングインタフェース|API]] に含まれるクラスは、[[パッケージ (Java)|パッケージ]]と呼ばれるグループに分類される。各パッケージは、相互に関連する[[インタフェース (抽象型)|インタフェース]]、[[クラス (コンピュータ)|クラス]]、[[例外処理|例外]]を含む。Java の各エディションでどのような機能が使えるかについては、それぞれのエディションの項目 ([[Java Platform, Standard Edition|Java SE]], [[Java Platform, Enterprise Edition|Java EE]], [[Java Platform, Micro Edition|Java ME]]) を参照のこと。
 
JavaのAPIセットは、[[オラクル (企業)|オラクル]]と他の個人や企業・団体が共同で、[[Java Community Process|JCP]] (Java Community Process) プログラムに沿って管理している。このプロセスに参加する人々が、Java APIの設計と開発に関わっている。このプロセスのあり方については、議論の対象となっている。
 
2004年より、[[IBM]]と[[BEAシステムズ]](後に[[オラクル (企業)|オラクル]]が買収)は、Javaの公式の[[オープンソース]][[実装]]を作る動きを、公的に支援している。2006年まで、サンはこうした動きに対しては拒否する立場をとってきたが、方針を変えて自社とJCPによるJavaの実装をオープンソースにする意向を表明し実行に移し始めている。
 
=== 拡張機能と関連技術 ===<!--
751 ⟶ 750行目:
=================================================================================-->
Javaの標準機能に対する拡張機能は、多くの場合、<code>javax.*</code>[[パッケージ (Java)|パッケージ]]に属する。こうした拡張機能は、[[Java Platform, Standard Edition|Java SE]]の Java開発キット (JDK) や Java実行環境 (JRE) には含まれない。Java の拡張機能や関連技術は、プログラミング言語Javaと密接に連携する。主なJavaの拡張機能と関連技術を示す(いくつかの拡張機能は{{いつ範囲|date=2019年2月|近年}}のJava SE標準ライブラリに統合された)。
*[[Java Platform, Enterprise Edition|Java EE]](従来のJ2EE)(Java Platform, Enterprise Edition) - 大規模で分散化された企業システムもしくは[[インターネット]]サーバ向けの Java のエディション
*[[Java Platform, Micro Edition|Java ME]](従来のJ2ME)(Java Platform, Micro Edition) - [[携帯機器]]など資源が限られている環境向けの Java のエディション
*JMF (Java Media Framework) - 音声・動画などのマルチメディア向けの[[アプリケーションプログラミングインタフェース|API]]
*[[Java Naming and Directory Interface|JNDI]] (Java Naming and Directory Interface) - ネーミングサービス・[[ディレクトリ・サービス|ディレクトリサービス]]へのアクセス
763 ⟶ 760行目:
*Jini - 分散システムを構築するネットワークアーキテクチャ
*Jiro - 分散した記憶装置を管理する技術
*[[Javaカード|Java Card]] - スマートカードなどの機器で安全にJavaアプリケーションの実行を実現する技術
*JavaSpaces - 分散環境でJavaオブジェクトの送受信・永続化などを支援する技術
*JML (Java Modeling Language) - [[契約による設計]] (Design by contract) に基づいた開発を支援する技術