トップQs
タイムライン
チャット
視点
Javaクラスライブラリ
Javaアプリケーションが実行時に呼び出せる動的ロード可能なライブラリ群 ウィキペディアから
Remove ads
Javaクラスライブラリ(ジャバクラスライブラリ、JCL)はJavaアプリケーションが実行時に呼び出せる動的ロード可能なライブラリ群である。また、特にJREが提供している java.lang
名前空間他の基本的なクラスを含むライブラリを指すこともある。このライブラリがそれぞれのオペレーティングシステム (OS) あるいはプロセッサ (CPU) の固有機能やシステムライブラリなどを隠蔽して抽象化・標準化する吸収層として働くことで、JavaアプリケーションなどがOSなどのプラットフォームに直接依存することを避けられるようになっている[1]。
JCLはJavaプラットフォーム内で次の3つの役割を担っている。
Remove ads
実装と設定
JCLはほぼ全体がJavaで書かれているが、ハードウェアやOSに直接アクセスする必要のある部分はその限りではない(例えば、入出力、ビットマップグラフィックス)。そのようなアクセスを行うクラスでは、一般にOSのAPIへのラッパーとして Java Native Interface を使用している。
JCLのほぼ全体が単一のJavaアーカイブファイル "rt.jar" に格納されており、JREやJDKの一部として配布されている。Javaクラスライブラリ (rt.jar) はデフォルトのブートストラップクラスパスに置かれ[2]、アプリケーションが一々クラスパスを指定する必要はない。ランタイムではJCLを探すのにブートストラップクラスローダを使う。
適合
任意のJava実装は Java Technology Compatibility Kit のコンプライアンステストに合格する必要があり、そこにJCLについてのテストも含まれている。
主な機能
→詳細は「Java Platform, Standard Edition」を参照
JCLの機能には、パッケージでカプセル化されたクラス群を通してアクセスする。
java.lang
は、言語とランタイムシステムに密接に関連した基本的なクラスおよびインタフェース群を含む。- ファイルシステムやネットワークにアクセスする機能は
java.io
、java.nio
、java.net
というパッケージを通して提供する。ネットワークでもSCTPに関してはcom.sun.nio.sctp
が提供する。 java.math
は任意精度の整数および小数の演算を提供する。- コレクションとユーティリティ - 組み込みのコレクションデータ構造とユーティリティクラス。正規表現、並行計算、ロギング、データ圧縮などを扱う。
- GUIと2Dグラフィックス - AWTパッケージ (
java.awt
) はネイティブOSに依存したGUIと2DグラフィックスAPIを提供している。Swingパッケージ (javax.swing
) はAWTをベースとしてOS非依存のウィジェット・ツールキットとルック・アンド・フィールを提供する。また、編集可能および編集不可能なテキストコンポーネントも用意している。 - サウンド: サウンドデータの読み書き、再生や合成のためのクラスおよびインタフェース群。
- テキスト:
java.text
はテキスト、日付、数値、メッセージを扱う。 - イメージパッケージ:
java.awt.image
とjavax.imageio
はイメージの読み書きや修正のためのAPIを提供する。 - XML: SAX、DOM、StAX、XSLT transforms、XPathなどのAPIにより、SOAPやJAX-WSといったWebサービスを可能にする。
- CORBAおよびRMI API(組み込みのORBを含む)
- セキュリティ機能を提供する
java.security
と暗号サービスを提供するjavax.crypto
- データベース:
java.sql
がSQLデータベースへのアクセスを提供する。 - スクリプトエンジンへのアクセス:
javax.script
パッケージにより、任意の対応するスクリプト言語へのアクセスを提供する。 - アプレット:
java.applet
によりアプリケーションをネットワーク経由でダウンロードして保護されたサンドボックス内で動作可能とする。 - JavaBeans:
java.beans
により、再利用可能なコンポーネント群を操作する手段を提供する。 - イントロスペクションとリフレクション:
java.lang.Class
がクラスを表すが、Method
やConstructor
といった他のクラスはjava.lang.reflect
にある。
ライセンス
→「OpenJDK」も参照
かつてのライセンス
OpenJDKがリリースされる以前、JDKは基本的にプロプライエタリなライセンスだった。2006年、サン・マイクロシステムズはJavaをオープンソースにする意思があると発表。2007年前半にJDKのほぼ全部をオープンソースとしてリリースすると約束した。2007年5月8日、サンがオープンソース化する権利を有していない一部を除いたクラスライブラリのソースコードをGPLライセンスで公開した[3]。その後は、公開できなかった部分をオープンソース化することが目標となった。
オープンソース化できなかった部分は使わないとしても依存関係があるためにビルドには必須であり、「バイナリプラグ」と呼ばれた[4]。サン(と後にオラクル)はコミュニティの協力も得て、バイナリプラグをオープンソース化したりオープンソースの代替品で置換していった。2008年5月にリリースされた OpenJDK 6 ではオープンソース化できていない部分は1%となっていた[5][6]。
2007年5月時点でオープンソース化できていなかった部分(OpenJDK 7 の4%)は次の通りである[7][8]。
- SNMP実装[8]
- オーディオエンジン全体。シンセサイザー部分も含め、後にオープンソースとなった[8][9]。シンセサイザー部分はOpenJDKプロジェクトで Gervill と呼ばれるオープンソース版を新規開発した。
- 暗号関連クラス群は後にオープンソースとしてリリースされた[10]。
- フォントラスタライズと拡大縮小のコードは、オープンソースのFreeTypeで置換[11][12][13]。
- カラーマネージメントシステムは、オープンソースのLittleCMSで置換[12]。プラグイン可能なレイヤーがあるので、商用には本来のプロプライエタリなカラーマネジメントシステムを使うこともできる。
- アンチエイリアス機能のあるグラフィックスラスタライザは、phoneMEプロジェクトで使っていたオープンソースのPiscesを採用[12][14]。
- JavaScriptプラグインはオープンソース化された(JavaScriptエンジンRhino自体は元からオープンソースである)[15]。
オープンソースライセンス
2010年12月、「バイナリプラグ」と呼ばれていた部分は全てオープンソースの代替品で置換され、JDK全体がオープン化された[16]。
Remove ads
代替実装
Javaクラスライブラリの他のフリーソフトウェア実装としては、GNU Classpath がある。他の実装とは異なり、これはクラスライブラリのみを実装しており、多くのフリーなJava実装(ランタイム)、Kaffe、SableVM、JamVM、CACAO などで使われている。
Apache Harmony もクラスライブラリのフリーソフトウェア実装だった。これにはJava仮想マシンとJavaコンパイラなども含まれており、Javaスタック全体をフリーソフトウェアで実装することを目的としていた。
脚注
関連項目
外部リンク
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads