削除された内容 追加された内容
(同じ利用者による、間の12版が非表示)
38行目:
# インタプリタ(仮想マシン)式で、マルチスレッドで、コードを動的に再解釈できる(''interpreted, threaded, and dynamic'')
 
(1)に関しては、C言語をモデルにした構文が採用され、予約語を少なくしている。オブジェクト指向はクラスベースとしたが、メッセージベースを実装できるAPIも追加された。同時にネットワーク系クラスライブラリの充実により分散オブジェクト技術にも適合した。(2)に関しては、ポインタ、アドレス直指定変数、多重継承、ジェネリクス、演算子オーバーロードなどを破棄し、強い型定義、例外処理、ガーベジコレクタなどを採用した。動作上の堅牢性は仮想マシンとセキュリティ不正コードチェックを兼ねたクラスローダを根幹とし、これは同時にプログラムをサンドボックス化して基礎レベルからの安全性セキュリティを確立した。(3)と(4)はJava仮想マシンの技術に依存した。(5)に関しては、マルチスレッドの取り扱いは<code>synchronized</code>ブロックと3つの予約語というシンプルな設計でまとめられた。ダイナミック性は様々に解釈できるが、多重ディスパッチは<code>instanceof</code>演算子とダウンキャストと例外処理の活用で実装でき、動的ディスパッチは<code>serializable</code>インターフェースとリフレクションAPIの活用で表現できた。
 
=== オブジェクト指向 ===
140行目:
Javaでは、C/C++のような、整数と[[ポインタ (プログラミング)|ポインタ]]の相互変換、配列の要素へのポインタによるアクセス、ポインタ演算といった機能は、基本機能としては提供されていない。ただし、オブジェクトへの参照は内部的にはアドレスである。
 
Javaは「[[パッケージ (Java)|パッケージ(''package'')]]」という[[名前空間]]を持つ。これはクラスとインターフェースを文字列レベルで分類し、またクラス名定義の衝突を回避する為の機能である。パッケージ名は任意の数だけカンマで繋ぐ事がげられて階層構造を表現出来る。パッケージの実体はクラス名に付ける接頭辞の羅列であり、その接頭辞文字列によってクラス名をユニークなものにしている。プログラミングの際は、先頭から任意の数だけ指定したパッケージ名以降をワイルドカード化し、パッケージ内のクラスをデフォルト指定出来るので短いコード記述が可能となる。
 
== 歴史 ==
579行目:
 
== Javaプラットフォーム ==
Javaプラットフォーム(''Java Platform'')は、'''Java実行環境'''(JRE)と'''Java開発キット'''(JDK)と'''拡張テクノロジ'''の総合である。上記三種は公式ベンダーだけでなくサードパーティ側からも提供されており、スマホ、パソコン、サーバーマシン、電子機器、マイクロプロセッサ、スマートカードなどのあらゆる環境に対応したJavaプラットフォームが存在している。'''Javaテクノロジの標準化'''は、公式ベンダーである[[オラクル (企業)|オラクル社]]([[サン・マイクロシステムズ|サン社]])を始めとする各企業各団体が参画する[[Java Community Process|Javaコミュニティプロセス]](JCP)が管理している。Javaテクノロジは'''オープンソース化'''されている為、各企業及び各任意団体が営利または非営利で膨大な数のソフトウェアと関連技術を公開し、巨大なITエコシステムを構築している。
[[Javaプラットフォーム]]の構成を説明する。
*[[#Java実行環境]] (JRE) は、[[Javaプラットフォーム]]に配置されたJavaアプリケーションを実行するために必要な、[[ソフトウェア]]である。[[Javaクラスライブラリ|標準クラスライブラリ]]や[[Java仮想マシン]]などから構成される。
*[[#Java開発キット]] (JDK) は、Javaプログラムの開発を支援する基本的なソフトウェアである。
*[[#JREとJDKの複数の実装]]で、JREとJDKの開発と提供の状況について簡単に述べる。
*[[#Javaのエディション]]で、[[オラクル (企業)|オラクル]]と[[Java Community Process|JCP]]が規定している3つのJavaのエディションについて簡単に述べる。
*[[#拡張機能と関連技術]]で、Javaの主な拡張機能と関連する技術を述べる。
 
=== Java実行環境(JRE)エディション(版) ===
現在、Javaプラットフォームには使用環境に合わせた4つのエディションが存在する。エディションによってJava実行環境とJava開発キットに含まれるツール構成に違いがあり、またクラスライブラリとAPIの構成内容も異なっている。なお、JDK 1.1までは単体エディションで、J2SE 1.2から3エディションに分かれた。J2SE 5.0頃からJava Cardが昇格して4エディションとなった。
{{Main|Java Runtime Environment}}
 
;スタンダード版(''Java Platform Standard Edition'')
Java実行環境 (JRE; Java Runtime Environment) は、[[Javaプラットフォーム]]に配置されたJavaアプリケーションを実行するために必要な、[[ソフトウェア]]である。標準クラス[[ライブラリ]]や[[Java仮想マシン]]などから構成される。
:スマホ、パソコン向けである。主にアプリケーションとWEBアプリを開発または実行する。一般ユーザー向けである。
;エンタープライズ版(''Java Platform Enterprise Edition'')
:サーバーマシン、ワークステーション向けである。スタンダード版に加え、WEBサーバー及び多層クライアントサーバーや業務用システムを開発する為の、様々な拡張技術クラスライブラリ&APIが追加されている。業務用プロフェッショナル仕様であり大規模である。
;マイクロ版(''Java Platform Micro Edition'')
:[[マイクロプロセッサ]]、[[組み込みシステム]]向けである。コンピュータ資源が制限されている集積回路や電子機器に対応した特定技術仕様であり、専用のクラスライブラリ&APIも用意されている。Java仮想マシンも比較的コンパクトにまとめらている。
 
'''カード版(''Java Card'')'''
エンドユーザは普通、Javaソフトウェアパッケージや[[ウェブブラウザ]][[プラグイン]]の利用を通じてJREを使う。[[オラクル (企業)|オラクル]] / [[Java Community Process|JCP]]をはじめ複数の団体や企業により、 さまざまな[[プラットフォーム (コンピューティング)|プラットフォーム]]向けに、多くの JRE の[[実装]]が開発・提供されている。
 
:[[ICカード|ICカード(スマートカード)]]及びそれに類似の小型メモリデバイス上で運用されるプログラムを実行または開発する為のエディションである。現在では[[SIMカード]]や[[ATMカード]]など幅広い分野に普及している。Java仮想マシンの機能は非常にコンパクトにまとめられており、幾つかのプリミティブ変数も省略されている。故に特殊なプログラミングスタイルが求められる。
JREの他、オラクル / JCPなどの団体・企業は、Java開発キット (JDK) と呼ばれるJREのスーパーセットの実装を開発・提供している。JDKは、Javaプログラムの開発を支援する基本的なソフトウェアであり、多くの開発ツールが含まれている。
 
==== JREの構成Java実行環境(JRE) ====
{{Main|Java Runtime Environment}}
Java実行環境は、[[Javaクラスライブラリ|標準クラスライブラリ]]と[[Java仮想マシン]]、およびいくつかのファイルとソフトウェアから構成される。
*Java[[クラス (コンピュータ)|クラス]][[ライブラリ]]群(標準クラスライブラリ)
*:実行環境に含まれるJavaクラスライブラリ群の実体は、JRE(Java実行環境)を実装した人々がJava標準クラスライブラリの[[ソースコード]]から[[コンパイラ|コンパイル]]した[[バイトコード]]である。このライブラリ群はJavaアプリケーションを実行するために必要であり、またJavaアプリケーション開発者も標準クラスライブラリを使って開発する。この標準クラスライブラリには、以下のライブラリが含まれる。
**コアライブラリ
***[[コレクション]]のライブラリ
***:[[線形リスト|リスト]]や[[連想配列]]<!--ディクショナリ-->([[ハッシュテーブル]])、[[木構造 (データ構造)|木構造]](ツリー)、[[集合]](セット)などの[[データ構造]]および[[アルゴリズム]]を実装している。
***[[リフレクション]] : Javaでは実行時にも[[クラス (コンピュータ)|クラス]]や[[メソッド (計算機科学)|メソッド]]の情報をもっており、クラス名やメソッド名を動的に指定して呼び出すことができる。
***[[Extensible Markup Language|XML]]文書を扱うライブラリ
***[[コンピュータセキュリティ|セキュリティ]]機能
***[[国際化と地域化]]のライブラリ
***[[シリアライズ]](serialization、オブジェクト直列化): [[オブジェクト (プログラミング)|オブジェクト]]の[[参照 (情報工学)|参照]]をたどって関連するオブジェクトをまとめてバイトストリームにすることができる。そのストリームを[[ファイル (コンピュータ)|ファイル]]に書き込めば、オブジェクトの状態をそのまま保存([[永続性 (計算機科学)|永続化]])できる。
**統合ライブラリ(外部システムとの連携機能)
***[[JDBC]]: [[データベース]]接続のAPI
***[[Java Naming and Directory Interface|JNDI]] (Java Naming and Directory Interface) : ネーミングサービス・[[ディレクトリ・サービス|ディレクトリサービス]]へのアクセス
***[[Java Remote Method Invocation|Java RMI]](Remote Method Invocation、遠隔メソッド呼び出し)と [[Common Object Request Broker Architecture|CORBA]] : 分散オブジェクト環境([[分散処理]]環境)
****分散システムなどで、別のJava仮想マシンにあるオブジェクトがお互いのメソッドを呼ぶことができる。[[ソケット (BSD)|ソケット]]等を直接利用する通信の低水準な実装をせずに、簡単に高水準な実装をすることができる。
**[[グラフィカルユーザインタフェース]] (GUI) のライブラリ
***[[Abstract Window Toolkit|AWT]](Abstract Window Toolkit、抽象[[ウィジェット・ツールキット|ウィンドウツールキット]])
***:重量コンポーネント(ネイティブコンポーネント)のライブラリ。重量コンポーネントを配置しイベント制御を行うことができる。
***[[Swing]]
***:軽量コンポーネントのライブラリ。AWT を使って開発されたが、ネイティブではない[[ウィジェット・ツールキット|ウィジェット]](GUIの部品要素)の実装を提供する。
***Java 2D : 2次元グラフィクスや画像([[JPEG]]など)を扱うライブラリ。
***Java Sound など音声を扱うAPI群(録音、再生、その他の処理)
**[[Javaアプレット]]
*[[jar]] (Java Archive) : Javaプログラムの標準圧縮ファイルの圧縮・展開機能。拡張子の関連付けをすれば、jarファイルをダブルクリックすることで実行できる。実際は [[ZIP (ファイルフォーマット)|ZIP]] で圧縮している。
*[[Java Native Interface|JNI]] (Java Native Interface) : JavaからCなど他の言語で実装されたネイティブなプログラムやライブラリを呼び出すことができる。
*[[Java仮想マシン]] (Java VM)
*:[[仮想機械|仮想マシン]]の一種であり、[[プラットフォーム (コンピューティング)|プラットフォーム]]に依存して実装された、JavaライブラリとJavaアプリケーションの[[バイトコード]]を実行する[[ソフトウェア]]
*[[プラグイン]]
*:[[ウェブブラウザ]]で[[Javaアプレット]]を実行するために必要なソフトウェア
*[[Java Web Start]]
*:Javaアプリケーションを[[World Wide Web|ウェブ]]を介して効率的にエンドユーザに配布する機構
*ライセンス文書および各種の文書
 
Java実行環境 (J''ava Runtime Environment'') は、Javaアプリケーションを実行するために必要なソフトウェアである。'''Java仮想マシン'''(''Java Virtual Machine'')と、<nowiki>''</nowiki>Java.exe<nowiki>''</nowiki>を始めとする様々な'''スターター'''(Web用プラグインを含む)と、'''Javaクラスライブラリ'''(''Java Class Library'')で構成される。Java実行環境の中核はJava仮想マシンである。エディション毎に仮想マシンの仕様と性能は異なっており、また実行時は複数の動作モードを持つ。仮想マシンはスターターを通して稼働されるのが普通である。様々な使用状況に対応したスターターが最初に実行されて、そこから仮想マシンが呼び出されてJavaプログラムの実行を移譲される。仮想マシンはJavaクラスライブラリを逐次読み込みながらJavaプログラムを実行する。
==== プログラムの動作形態 ====
Java実行環境(JRE)に用意されているコンポーネント(クラスライブラリ)を利用する事でJavaプログラムは結果的に、デスクトップ上、モバイル上、マイクロプロセッサ上、WEBページ上、WEBクライアント上、サーバー上などのプラットフォームに特化したアプリケーションに派生する。Java開発環境(JDK)ではそのコンポーネントに対応するAPIを用いて開発する。JRE&JDKが保有するコンポーネントとAPIは、後述のエディション(版)によって異なっている。例えばサーバープログラム用のコンポーネントとAPIはエンタープライズ版にしか含まれていない。
 
エンドユーザはソフトウェアパッケージか、企業/団体サイトからのダウンロード、又はWEBブラウザ[[プラグイン]]を通してJava実行環境をインストールする。Java実行環境のツール内容とクラスライブラリ構成は、エディション毎に違いがある。
;[[Javaアプリケーション]]
:ローカルのコンピュータで実行されるJavaプログラム。
;[[Javaアプレット]]
:[[コンピュータネットワーク|ネットワーク]]上に置かれ[[ウェブブラウザ]]上で実行できるJavaプログラム。ワンクリックで実行できるため、その動作には[[サンドボックス (セキュリティ)|サンドボックス]]機構の下で厳しい制限が加えられている。
;[[Java Servlet|Javaサーブレット]]
:[[ウェブページ]]を動的に作るJavaプログラム。[[Perl]]などによる[[Common Gateway Interface|CGI]]に比べ、サーバ側の負荷が低いなどのメリットがある。
;[[JavaServer Pages]] (JSP)
:[[Extensible HyperText Markup Language|XHTML]] ([[HyperText Markup Language|HTML]]) 内に記述するJavaプログラム。サーバ側で解釈して動的にウェブページを作り出す。コードの見た目は似ているが、[[ECMAScript]] ([[JavaScript]]) のようにブラウザ側で実行するスクリプトではない。サーブレットの機能を補完するもの。類似の技術に [[Active Server Pages]] (ASP)、[[ASP.NET]]、[[PHP (プログラミング言語)|PHP]] などがある。
;[[Java Web Start]]
:[[Javaアプリケーション]]を簡単に配備し実行する仕組み。[[拡張子]]がjnlpとなっているファイルをウェブブラウザなどでワンクリックしただけで自動ダウンロード、自動インストールを行い、また最新バージョンがあるかをネット上で自動チェックしあれば自動アップデートしてから実行する。[[Javaアプレット]]のように実行時にウェブブラウザを必要とすることはない。類似技術としてマイクロソフトのノータッチデプロイメント、ClickOnce がある。
 
'''Javaクラスライブラリ'''
=== Java開発キット(JDK) ===
{{main|Java Development Kit}}
Java開発キット (JDK; Java Development Kit) は、[[オラクル (企業)|オラクル]] / [[Java Community Process|JCP]] をはじめ複数の団体や企業により開発・提供されている、Javaプログラムの開発を支援する基本的なソフトウェアである。Javaが世に出て以来、広く使われてきたJavaの開発ツールである。[[javac]]、[[javadoc]]、[[デバッガ]]などを含む多くの開発ツールが含まれている。また、完全な[[Java Runtime Environment|Java実行環境]] (JRE) を同梱している。なお、Javaプログラムを実行するだけであれば、Java実行環境が導入されていれば充分で、Java開発キットを導入する必要は無い。ちなみにJava開発キット (JDK) の呼称は、これまでに何度か変更されている。
 
それぞれのJavaクラスライブラリ内部からプログラマの利用に向けて外部公開されている部分を「Java API」と呼ぶ。
*J2SE 1.2.2_004 までは JDK と呼んでいた。
*J2SE 1.4 までは Java 2 SDK と呼んでいた。
*J2SE 5.0 では 再び JDK と呼んでいる。
 
* 言語基盤ライブラリ - Java言語の基本部分を
==== 統合開発環境(IDE) ====
* 入出力ライブラリ
* データコレクションライブラリ
* 数学ライブラリ
* 国際化地域化ライブラリ
* ネットワークライブラリ
* グラフィックユーザーインターフェスライブラリ
* アプレットライブラリ
* Javaビーンズライブラリ
* リモートメソッドライブラリ
* セキュリティライブラリ
* バッファストリームライブラリ
* リフレクションライブラリ
* データベース接続ライブラリ
* XMLライブラリ
* 名前解決&階層特定ライブラリ
 
'''Javaアプリケーションの形態'''
*[[NetBeans]] - [[オラクル (企業)|オラクル]]([[サン・マイクロシステムズ]])を中心に開発されている[[オープンソース]]のIDE。Windows版、Linux版。Solaris版、Mac OS版。
**[https://ja.netbeans.org NetBeans.org] [http://www.netbeans.jp/ NetBeans.jp]
*WebSphere Studio - [[IBM]]。Eclipse SDK の上位版ともいえるもの。[[WebSphere]] [[WebSphere Application Server|Application Server]] と統合されている。Windows版、Linux版。Solaris版、Mac OS版。
**[http://www.ibm.com/jp/software/websphere/ft/studio/index.html WebSphere開発ツール]
*[[Eclipse (統合開発環境)|Eclipse SDK]] - [[Eclipse財団]]。以前はIBMが管理していた。Web Sphere Studioのオープンソース版ともいえる。Windows版、Linux版、Solaris版、Mac OS版。
**[http://www.eclipse.org/ eclipse.org(英語)] [http://eclipsewiki.net/eclipse/ EclipseWiki(日本語)]
*[[JBuilder]] - [[エンバカデロ・テクノロジーズ]]。Windows版、Linux版。Solaris版、Mac OS版。
**[http://www.embarcadero.com/jp/products/jbuilder JBuilder]
*[[JDeveloper|Oracle JDeveloper]] - [[オラクル (企業)|オラクル]]。Oracle Application Serverと統合されている。Windows版、Linux版。Solaris版。2005年6月28日に無料化した。
**[http://www.oracle.com/technetwork/jp/developer-tools/jdev/overview/ JDeveloper]
*Oracle Workshop for WebLogic - [[オラクル (企業)|オラクル]]([[BEAシステムズ]])。{{仮リンク|Oracle WebLogic Server|en|Oracle WebLogic Server|label=WebLogic}}と統合されている。
**[http://www.oracle.com/technetwork/jp/developer-tools/workshop/ Oracle Workshop for WebLogic]
*[[BlueJ]] - Deakin University([[オーストラリア]])とUniversity of Kent([[イングランド]])、[[サン・マイクロシステムズ]]が共同で開発した[[フリーソフトウェア]]、Javaの学習に適したインタラクティブな統合開発環境。
**[http://www.bluej.org/ BlueJ]
*[[IntelliJ IDEA]] - JetBrainsが開発販売している商用の統合開発環境。
**[http://www.jetbrains.com/idea/ IntelliJ IDEA]
*JCreator - Xinox Softwareが開発販売している商用の統合開発環境。
**[http://www.jcreator.com/ JCreator]
*[[Xcode]] - [[アップル (企業)|アップル]]。[[macOS]]に付属する統合開発環境。
 
Java実行環境に用意されている特定のJavaクラスライブラリを利用する事でJavaプログラムは結果的に、以下の四種類のアプリケーション形態に派生する。
==== 開発サポートツール ====
 
;[[Javaアプリケーション]](application)
*[[Apache Ant]] - Javaアプリケーションのビルドツール。[[Apacheソフトウェア財団]]のプロジェクトによって開発された。[[コンパイル]]、[[バージョン管理システム]]との連携、[[jar]]、[[javadoc]]生成、ファイルのコピー/移動/削除/変換などの一連の処理を自動化して効率的に実行する。[[make]] と同種のツールであり、[[Extensible Markup Language|XML]]ファイルにビルドの規則を記述する。Java 以外の言語によるアプリケーション開発や、アプリケーション開発以外の用途にも使うことができる。
:スマホ、モバイルPC、パソコンのローカル環境で実行されるJavaプログラム。「[[Java Web Start]]」は任意のjnlpファイル(''java network launching protocol'')をダウンロードして実行できるJavaアプリの配布システムである。この類似技術としてマイクロソフトのノータッチデプロイメント、ClickOnceがある。
*[[Apache Maven]] - Javaアプリケーションのプロジェクト管理ツール。Apacheソフトウェア財団のプロジェクトによって開発された。
;[[Javaアプレット]](applet)
*[[JUnit]] - Javaアプリケーションの単体テストフレームワーク。単体テストを自動化する。[[xUnit]]の一種である。[[テスト駆動開発]]を支援する。
:サーバーからダウンロードされてウェブブラウザ上で実行されるJavaプログラム。その動作には[[サンドボックス (セキュリティ)|サンドボックス]]機能の下で厳しい制限が加えられている。
;[[Java Servlet|Javaサーブレット]](servlet)
:サーバーマシンで実行されるJavaプログラム。クライアントからのリクエストを逐次トランザクションして順次レスポンスする。WEBクライアントにはHTMLなどのプロトコルページ及び各種メディアをレスポンスしてWEBブラウザ上で表示させる。[[Perl]]などによる[[Common Gateway Interface|CGI]]に比べ、サーバ側の負荷が低いなどのメリットがある。
;[[JavaServer Pages|Javaサーバーページ]] (java server page)
:サーブレットをWEBサーバー用に特化したものであり、[[Extensible HyperText Markup Language|XHTML]] ([[HyperText Markup Language|HTML]]) 内に記述するJavaプログラムである。WEBクライアントからのリクエストに伴うパラメータに従い、それをサーバー側で解釈してWEBページ内容を動的に生成、変化させてレスポンスする。コードは似ているが、[[JavaScript]]の様にブラウザ側で実行するスクリプトではない。類似の技術に[[Active Server Pages]]、[[PHP (プログラミング言語)|PHP]]がある。
 
=== エディションJava開発キット(JDK) ===
{{main|Java Development Kit}}
[[オラクル (企業)|オラクル]]と[[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開発キット (''Java Development Kit'') は、Javaプログラムを開発するための基本的なソフトウェアである。コンパイラ、デバッガ、アーカイバ、ソフトウェアモニター、ドキュメントジェネレーターなどの'''基本開発ツール'''と、様々な'''開発支援ツール'''と、'''Java API'''(''Java Application Programming Interface'')で構成されている。前述のエディションによって開発ツール内容とAPI構成に違いがある。Java開発キットの呼称はこれまでに何度か変更されている。
 
*J2SE 1.2.2_004 までは、JDK(''Java Development Kit'')と呼んでいた。
;スタンダード版(Java Platform Standard Edition)
*J2SE 1.4 までは、Java2 SDK(''Java2 Software Development Kit'')と呼んでいた。
:[[Java Platform, Standard Edition|Java SE]]は、[[ワークステーション]]、[[パーソナルコンピュータ]]や[[サーバ]]などの機器で、汎用的な用途に使われる。
*J2SE 5.0 からは再び、JDK(''Java Development Kit'')と呼んだ。
;エンタープライズ版(Java Platform Enterprise Edition)
*JavaSE 7 からは、エンタープライズ版(EE)では Java SDK(''Java Software Development Kit'')と呼び、スタンダード版(SE)とマイクロ版(ME)では JDK(''Java Development Kit'')と呼ぶようになった。JDKはSDKの拡張サブセット(SDKの一部分+その他)とされる。
:[[Java Platform, Enterprise Edition|Java EE]]は、Java SE に加え、多層[[クライアント・サーバ|クライアントサーバ]]の大規模システムを開発するための、さまざまな[[アプリケーションプログラミングインタフェース|API]]が追加されている。
;マイクロ版(Java Platform Micro Edition)
:[[Java Platform, Micro Edition|Java ME]]は、コンピュータ資源が限られている、[[組み込みシステム]]などを用途として想定したエディションである。機器の種類に応じた、ライブラリのいくつかの異なるセット(プロファイル)を規定している。Java SEのいくつかのAPIは実装していないが、このエディションで対象とする用途には十分な機能を持っている。完全なJava SEのライブラリを使うには、このエディションで対象とする用途では記憶装置の容量が足りない。
 
'''カード版(JavaJava Card)API'''
 
APIは、アプリケーション・プログラミング・インターフェスの頭字語であり、Javaクラスライブラリ内部からプログラマに向けて外部公開されているクラス、インターフェース、メソッド、フィールド、コンスタントバリューの総合である。またその定義情報を示すプロトコルを指す。プログラマはこれを用いて開発を行う。
:[[Javaカード|Java Card]]は、[[ICカード|ICカード(スマートカード)]]及びそれに類似の小型メモリデバイス上で運用されるプログラムを実行または開発する為のエディションである。現在ではSIMカードやATMカードなど幅広い分野に普及している。
 
* java.lang
Java [[アプリケーションプログラミングインタフェース|API]] に含まれるクラスは、[[パッケージ (Java)|パッケージ]]と呼ばれるグループに分類される。各パッケージは、相互に関連する[[インタフェース (抽象型)|インタフェース]]、[[クラス (コンピュータ)|クラス]]、[[例外処理|例外]]を含む。Java の各エディションでどのような機能が使えるかについては、それぞれのエディションの項目 ([[Java Platform, Standard Edition|Java SE]], [[Java Platform, Enterprise Edition|Java EE]], [[Java Platform, Micro Edition|Java ME]]) を参照のこと。
* java.io
* java.util
* java.math
* java.net
* java.awt
* java.applet
* java.beans
* java.rmi
* java.security
* java.nio
 
'''統合開発環境と開発支援ツール'''
JavaのAPIセットは、[[オラクル (企業)|オラクル]]と他の個人や企業・団体が共同で、[[Java Community Process|JCP]] (Java Community Process) プログラムに沿って管理している。このプロセスに参加する人々が、Java APIの設計と開発に関わっている。このプロセスのあり方については、議論の対象となっている。
 
統合開発環境(IDE)は、JDKを中核にしてビジュアルエディターやビルドマネージャーなどの様々な開発支援機能を備えたソフトウェアである。JDKのみだと、メモ帳でプログラムを書きコマンドラインでコンパイルしコンソールでデバッグをするという極めて原始的な作業になるが、IDEを使用する事で多機能エディタコーディングとビルド過程の自動化と視覚的なデバッグが可能になる。Java開発用のIDEは様々な企業および団体から公開されている。
2004年より、[[IBM]]と[[BEAシステムズ]](後に[[オラクル (企業)|オラクル]]が買収)は、Javaの公式の[[オープンソース]][[実装]]を作る動きを、公的に支援している。2006年まで、サンはこうした動きに対しては拒否する立場をとってきたが、方針を変えて自社とJCPによるJavaの実装をオープンソースにする意向を表明し実行に移し始めている。
 
*'''[[NetBeans]]''' - [[オラクル (企業)|オラクル社]]([[サン・マイクロシステムズ|サン社]])を中心に開発されている[[オープンソース]]のIDE。Win版、Linux版。Solaris版、MacOS版。[https://ja.netbeans.org NetBeans.org] [http://www.netbeans.jp/ NetBeans.jp]。
=== サードパーティによる派生物 ===
*'''WebSphere Studio''' - [[IBM|IBM社]]。Eclipse SDK の上位版ともいえるもの。[[WebSphere]] [[WebSphere Application Server|Application Server]] と統合されている。Win版、Linux版。Solaris版、MacOS版。[http://www.ibm.com/jp/software/websphere/ft/studio/index.html WebSphere開発ツール]。
'''JREとJDKのオープンソース化'''
*[[Eclipse (統合開発環境)|'''Eclipse SDK''']] - [[Eclipse財団]]。以前はIBMが管理していた。Web Sphere Studioのオープンソース版ともいえる。Win版、Linux版、Solaris版、MacOS版。[http://www.eclipse.org/ eclipse.org(英語)] [http://eclipsewiki.net/eclipse/ EclipseWiki(日本語)]。
*'''[[JBuilder]]''' - [[エンバカデロ・テクノロジーズ|エンバカデロ社]]。Win版、Linux版。Solaris版、MacOS版。[http://www.embarcadero.com/jp/products/jbuilder JBuilder]。
*[[JDeveloper|'''Oracle JDeveloper''']] - [[オラクル (企業)|オラクル]]。Oracle Application Serverと統合されている。Win版、Linux版。Solaris版。2005年6月28日に無料化した。[http://www.oracle.com/technetwork/jp/developer-tools/jdev/overview/ JDeveloper]。
*'''Oracle Workshop for WebLogic''' - [[オラクル (企業)|オラクル社]]([[BEAシステムズ|BEAシステムズ社]])。{{仮リンク|Oracle WebLogic Server|en|Oracle WebLogic Server|label=WebLogic}}と統合されている。[http://www.oracle.com/technetwork/jp/developer-tools/workshop/ Oracle Workshop for WebLogic]。
*'''[[BlueJ]]''' - Deakin University([[オーストラリア|豪]])とUniversity of Kent([[イングランド|英]])と[[サン・マイクロシステムズ|サン社]]が共同で開発した[[フリーソフトウェア]]、Javaの学習に適したインタラクティブな統合開発環境。[http://www.bluej.org/ BlueJ]。
*[[IntelliJ IDEA|'''IntelliJ IDEA''']] - JetBrains社が開発販売している商用の統合開発環境。[http://www.jetbrains.com/idea/ IntelliJ IDEA]。
*'''JCreator''' - Xinox Software社が開発販売している商用の統合開発環境。[http://www.jcreator.com/ JCreator]。
*'''[[Xcode]]''' - [[アップル (企業)|アップル社]]。[[macOS]]に付属する統合開発環境。
 
開発サポートツールは、プロジェクト管理、自動ビルド、モニタリングを容易にする。下記の他にも多くの支援ツールが存在する。
[[オラクル (企業)|オラクル]]およびいくつかの団体が、[[オープンソース]]もしくは[[フリーソフトウェア]]の[[ライセンス]]で利用できる、[[Java仮想マシン]]およびJRE 、JDKの[[実装]]を開発している。サン / JCPはJava発表時からJava仮想マシンおよび標準ライブラリの仕様を公開しており、Java標準クラスライブラリの[[ソースコード]]もJDKの一部として提供していた。しかしソースコードの改変は下記のOpenJDKリリースまでライセンスで認めていなかった。そのため、サンの実装とは別に、オープンソースもしくはフリーソフトウェアでかつサンの実装と互換性のあるJava標準クラスライブラリとJava仮想マシンが開発された。
 
*[[Apache Ant|'''Apache Ant''']] - Javaアプリケーションのビルドツール。[[Apacheソフトウェア財団]]のプロジェクトによって開発された。[[コンパイル]]、[[バージョン管理システム]]との連携、[[jar]]、[[javadoc]]生成、ファイルのコピー/移動/削除/変換などの一連の処理を自動化して効率的に実行する。[[make]] と同種のツールであり、[[Extensible Markup Language|XML]]ファイルにビルドの規則を記述する。Java 以外の言語によるアプリケーション開発や、アプリケーション開発以外の用途にも使うことができる。
2006年にサンはライセンスの方針を変更し近い将来オープンソースにする意向を表明し、[[2007年]]5月8日にJava SE 6をOpenJDKとして [[GNU General Public License]] にてリリースした<ref>{{Cite web
*[[Apache Maven|'''Apache Maven''']] - Javaアプリケーションのプロジェクト管理ツール。Apacheソフトウェア財団のプロジェクトによって開発された。
|title = Sun Fulfills Promise of Open and Free Java Technology and Releases Java SE Platform to OpenJDK Community
*'''[[JUnit]]''' - Javaアプリケーションの単体テストフレームワーク。単体テストを自動化する。[[xUnit]]の一種である。[[テスト駆動開発]]を支援する。
|url = http://www.sun.com/aboutsun/pr/2007-05/sunflash.20070508.3.xml
|author = Sun Microsystems, Inc
|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]。
また[[OpenJDK]]には[[IBM]]が協力している。
 
=== Javaの拡張テクノロジ ===<!--
'''Windows / Linux用プラットフォーム'''
 
広く使われている[[プラットフォーム (コンピューティング)|プラットフォーム]]などに対しては、複数の団体や企業が独自にJREやJDKの[[実装]]を開発・提供している。独自の[[最適化 (情報工学)|最適化]]技術を適用したり、特定の用途に特化した最適化、あるいは異なるライセンスを採用するなど、それぞれ特徴がある。
 
*[[Linux]] / [[IA-32]]プラットフォーム : [[オラクル (企業)|オラクル]]、Blackdown、[[IBM]]、Kaffe.org、GNUプロジェクトなどがJREやJDKを実装・提供している。
*[[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の部分も実装が進んでいる。Windows環境では、GCJは[[MinGW]] (Minimalist GNU for Windows) もしくは[[Cygwin]]を使って実行できる。Cygwinの場合は、対象がライセンスが[[GNU General Public License|GPL]]のソフトウェアに限られるが、MinGWの場合は商用含め、すべてのソフトウェアで利用できる。
 
'''Excelsior JET'''
 
米Excelsior社がExcelsior JETというahead-of-timeコンパイラを販売している[http://www.excelsior-usa.com/jet.html]。Java SE 用に書かれたプログラムを [[Microsoft Windows|Windows]]のネイティブマシンコードであるexeファイル(実行ファイル)に変換できる。起動の高速化やアプリケーションの[[難読化コード|難読化]]を実現する。
 
'''Windows用実行ファイル化ツール'''
 
[[Microsoft Windows|Windows]]にて、配布、実行しやすくするために、Javaの[[jar]]ファイルをexeファイル(実行ファイル)でラッピングするツールがある。以下が、その一例である。
*[http://exewrap.osdn.jp/ exewrap]
*[http://jsmooth.sourceforge.net/ JSmooth]
*[http://launch4j.sourceforge.net/ Launch4j]
*[http://nsis.sourceforge.net/Java_Launcher_with_automatic_JRE_installation NSIS - Java Launcher with automatic JRE installation]
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がインストールされているため、あまり普及していない。 -->
 
=== 拡張機能と関連技術 ===<!--
================================================================================
ここには、Java Community Process のもとで開発された拡張機能と関連技術のみを記述します。
=================================================================================-->
拡張テクノロジは、様々な営利企業および任意団体から、javaxパッケージ/orgパッケージなどのJava API、JREとJDKを中核にした拡張仕様コンテナ、様々なアプリケーションとコンポーネントとデータベースシステムとネットワークプロトコル等を組み合わせたソフトウェア・システムといった形態で公開されている。以下はその代表的なものである。
Javaの標準機能に対する拡張機能は、多くの場合、<code>javax.*</code>[[パッケージ (Java)|パッケージ]]に属する。こうした拡張機能は、[[Java Platform, Standard Edition|Java SE]]の Java開発キット (JDK) や Java実行環境 (JRE) には含まれない。Java の拡張機能や関連技術は、プログラミング言語Javaと密接に連携する。主なJavaの拡張機能と関連技術を示す(いくつかの拡張機能は{{いつ範囲|date=2019年2月|近年}}のJava SE標準ライブラリに統合された)。
 
*JMF (Java Media Framework) - 音声・動画などのマルチメディア向けの[[アプリケーションプログラミングインタフェース|API]]
*[[Java Naming and Directory Interface|JNDI]] (Java Naming and Directory Interface) - ネーミングサービス・[[ディレクトリ・サービス|ディレクトリサービス]]へのアクセス
* JSML (Java Speech Markup Language) - [[音声合成]]システムにテキストの注釈を追加する
759 ⟶ 701行目:
*JMI (Java Metadata Interface) - Javaのメタデータの作成・アクセス・検索・送受信に関する仕様
*[[Java Management Extensions|JMX]] (Java Management Extensions) - 分散環境における機器・アプリケーション・ネットワークサービスの管理 / 監視を行う技術
*[[JavaServer Pages|JSP]] (JavaServer Pages) - [[Java Platform, Enterprise Edition|Java EE]] による[[ウェブアプリケーション]]で [[Extensible HyperText Markup Language|XHTML]] などの[[ファイル (コンピュータ)|ファイル]]に Java のコードを埋め込み、動的に文書を生成する技術
*[[JavaServer Faces|JSF]] (JavaServer Faces) - Java EE によるウェブアプリケーションでユーザインタフェースの簡易な開発を支援する技術
*[[Java Native Interface|JNI]] (Java Native Interface) - Java から他の言語で実装されたネイティブなプログラムやライブラリを呼び出すための仕様
*[[JXTA]] - [[Peer to Peer]] (P2P) の仮想ネットワークのためのオープンプロトコル
*[[Java3D|Java 3D]] - 3次元グラフィクスプログラミングのための高水準な API [https://java3d.dev.java.net/ Java 3D] <!--([http://java.sun.com/products/java-media/3D/ ホーム]、[http://java.sun.com/products/java-media/3D/forDevelopers/J3D_1_3_API/j3dapi/ API])-->
*JOGL (Java OpenGL) - [[OpenGL]] を使う3Dグラフィクスプログラミングのための低水準な API
*[[LWJGL]] (Light Weight Java Game Library) - ゲームを開発するための低水準な API で、[[OpenGL]]、[[OpenAL]]、[[OpenCL]] および多様な[[入力機器]]の制御機能も提供する
774 ⟶ 715行目:
=================================================================================-->
 
=== Javaテクノロジの標準化 ===
 
:''詳細は [[Java Community Process]] (JCP) を参照''
現在、[[Javaプラットフォーム]]の将来のバージョンや機能は、[[Java Community Process|JCP]] (Java Community Process) の標準化プロセスのもとで開発されている。JCPのメンバになることで、Java技術の将来のバージョンや機能の定義に関与することができる。JCPには、[[IBM]]、[[ボーランド]]、[[富士通]]、[[Apacheソフトウェア財団]]、[[ヒューレット・パッカード]] など、さまざまな個人、団体、企業がメンバとして参加している。
 
[[Javaプラットフォーム]]の標準技術仕様は、[[Java Community Process|Javaコミュニティプロセス]] (JCP|''Java Community Process'') に管理されていた。JCPに参画する事でJavaテクノロジの標準化カンファレンスに関与できた。[[ボーランド|ボーランド社]]、[[富士通]]、[[Apacheソフトウェア財団]]、[[ヒューレット・パッカード|ヒューレット・パッカード社]]なども参加していた。JCPはJavaプラットフォームに追加される仕様や技術を、JSRs (''Java Specification Requests'') と呼ばれる文書で公開していた。Java言語仕様と標準APIに関連したJSRsを以下に列挙する。
JCPは、Javaプラットフォームに追加する仕様や技術を、JSRs (Java Specification Requests) という文書群に記述する。
 
プログラミング言語JavaとJavaコアAPIに関わるいくつかの JSRs を示す。
*[http://www.jcp.org/en/jsr/detail?id=14 JSR 14] ''Add [[総称型|Generic Types]] To The Java Programming Language'' (J2SE 5.0)
*[http://www.jcp.org/en/jsr/detail?id=41 JSR 41] ''A Simple [[表明|Assertion]] Facility'' (J2SE 1.4)
796 ⟶ 736行目:
*[http://www.jcp.org/en/jsr/detail?id=244 JSR 244] ''Java EE 5 Specification'' (Java EE 5)
*[http://www.jcp.org/en/jsr/detail?id=270 JSR 270] ''Java SE 6 ("Mustang") Release Contents'' (Java SE 6)
*[http://www.jcp.org/en/jsr/detail?id=275 JSR 275] ''Physical Units/Quantities Support (Java SE) - JScienceをもとにした[[リファレンス実装]]''
*[http://www.jcp.org/en/jsr/detail?id=901 JSR 901] ''Java Language Specification'' (J2SE 5.0)
 
=== Javaへの批判オープンソースモデル ===
'''Javaテクノロジのオープンソース化'''
 
1996年のJava登場初期から、ベンダー元の[[サン・マイクロシステムズ|サン社]](後に[[オラクル (企業)|オラクル社]]が買収)は、Java仮想マシンとJavaクラスライブラリの仕様を公開しており、サードパーティによるJavaプラットフォーム移植と関連ソフトウェアと拡張テクノロジの開発を促していた。しかし過度の技術流出を避ける為の枠組みとして、ソースコードの改変までは認めていなかった。この部分的オープンソース制度に便乗する形で2004年から、[[IBM|IBM社]]と[[BEAシステムズ|BEAシステムズ社]](後にオラクル社が買収)が、独自のオープンソース化を目的にしたJava関連ソフトウェア&拡張テクノロジの開発を支援するプロジェクトを立ち上げていた。その中でJava仮想マシンと標準クラスライブラリの互換製品も登場していた。
 
それらの標準化が進むにつれて、Javaコミュニティプロセスへの影響力低下を懸念したサン社は、IBM主体によるオープンソース化プロジェクトへの協力に消極的な立場を取っていたが、2006年から方針を変えて賛同し、2007年5月8日にはJava SE 6を「[[OpenJDK]]」として[[GNU General Public License|GNU一般公開ライセンス]]の下でリリースした<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|author=Sun Microsystems, Inc|date=2007-5-8|accessdate=2009年9月16日}}</ref>。OpenJDKではソースコードの改変も認められた。「[[GNU Classpath]]」は、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社も協力している。
 
'''GNUプロジェクト'''
 
[[GNUプロジェクト]]は「[[GNU Interpreter for Java]]」と[[GNUコンパイラコレクション]]のJava版である「[[GNU Compiler for Java]]」を公開している。「GNU Compiler for Java」は、ahead-of-timeコンパイル機能を備えており、Javaのソースコードとバイトコードを、ネイティブマシンコード(Windowsではexeファイル)に変換できる。また、Java標準クラスライブラリの互換版である「[[GNU Classpath]]」も公開している。Windows環境下の「GNU Compiler for Java」は、[[MinGW]] (WindowsAPIを使う為のライブラリ) と併せて、[[Cygwin]](Unix環境を再現するソフトウェア)の環境上で実行できる。なお、Cygwinの使用は[[GNU General Public License|GNU一般公開ライセンス]]に従う必要があるが、MinGWの方はライセンスフリーである。
 
'''Windows / Linux用プラットフォーム'''
 
メジャーなオペレーティングシステム(OS)では、営利企業および任意団体による独自開発のJREとJDKが公開されている事が多い。
 
*[[Linux]] / [[IA-32]]プラットフォーム : [[オラクル (企業)|オラクル]]、Blackdown、[[IBM]]、Kaffe.org、GNUプロジェクトなどがJREやJDKを実装・提供している。
*[[Microsoft Windows|Windows]]/IA-32プラットフォーム : オラクル、IBMなどがJREやJDKを実装・提供している。
 
'''Excelsior JET'''
 
米Excelsior社がExcelsior JETというahead-of-timeコンパイラを販売している[http://www.excelsior-usa.com/jet.html]。Java SE 用に書かれたプログラムをWindowsのネイティブマシンコードであるexeファイル(実行ファイル)に変換して、起動の高速化やアプリケーションの[[難読化コード|難読化]]を実現できる。
 
'''Windows用実行ファイル化ツール'''
 
[[Jar]]ファイルをWindous用実行ファイル(.exe)にラッピングする以下のツールが存在する。
*[http://exewrap.osdn.jp/ exewrap]
*[http://jsmooth.sourceforge.net/ JSmooth]
*[http://launch4j.sourceforge.net/ Launch4j]
*[http://nsis.sourceforge.net/Java_Launcher_with_automatic_JRE_installation NSIS - Java Launcher with automatic JRE installation]
 
JSmoothなどは、Java実行環境が無い時はそれも自動インストールする機能を備えている。また、純粋なJava実行環境では不可能だったタスクアイコンを表示させる機能も備えている。
 
<!-- ただし、これらのツールには最新の[[JDK]]でコンパイルされた[[jar]]ファイルには対応していないなどの欠点もある上、{{いつ範囲|date=2019年2月|近年}}の [[Microsoft Windows|Windows]] にはほとんどにJavaがインストールされているため、あまり普及していない。 -->== Javaへの批判 ==
{{main|Javaに対する批判}}