Java Platform, Standard Edition
Java Platform, Standard Edition または Java SE(バージョン5.0までは Java 2 Platform, Standard Edition または J2SEと呼ばれていた)は多くのJavaプラットフォームプログラムで役立つJava APIの集合体である。Java仮想マシン、APIなどから構成される。 J2SE1.4バージョン (Merlin) 以降、Java SEプラットフォームはJava Community Process (JCP) の下で開発されている。JSR 59 はJ2SE1.4の包括仕様であり、JSR 176はJ2SE 5.0 (Tiger) を、JSR 270はJava SE 6 (Mustang) を規定している。Java SE 7 (Dolphin) はJSR 336の下でリリースされた。
Java SEでは標準的な機能のみが定められており、サーバ向けの機能についてはJava SEを拡張した企業向けのJava Platform, Enterprise Edition (Java EE) にて定義されている。
下記は主要なJava SEパッケージの説明である。全てのパッケージリストはテンプレート:Javadoc:SEを参照。
一般的なパッケージ
テンプレート:Javadoc:SE
Javaの基本的なパッケージ。
パッケージ java.lang
は、言語とランタイム(実行)システムに緊密な基本的なクラスとインタフェースを含む。これはクラス階層を形成する基底クラス、言語仕様に密接な型、基本的な例外、数学関数、スレッド、セキュリティ関数、下位にあるネイティブシステムに関する情報も含む。
java.lang
の主なクラス:
- テンプレート:Javadoc:SE – 全てのクラス階層の頂点に立つクラス。(関連項目 Javaの文法#Objectクラスのメソッド。)
- テンプレート:Javadoc:SE – 列挙クラスの基本クラス (J2SE 5.0以降)。
- テンプレート:Javadoc:SE – Javaの根幹となるクラス。 リフレクションシステム。
- テンプレート:Javadoc:SE – 例外クラス階層の基底クラスとなるクラス。
- テンプレート:Javadoc:SE, テンプレート:Javadoc:SE, テンプレート:Javadoc:SE – 各例外型の基底クラス。
RuntimeException
はthorowやthrows宣言をせずとも実行時に起こる例外を指すクラスのスーパークラスであり、Exception
のサブクラスでもある。Exception
、Error
はThrowable
のサブクラス。 - テンプレート:Javadoc:SE – Javaにおいてスレッドを使用することができるクラス。
- テンプレート:Javadoc:SE – 文字列と文字列リテラルを表現するクラス。
- テンプレート:Javadoc:SE, テンプレート:Javadoc:SE – 文字列操作機能を提供するクラス。(
StringBuilder
はJ2SE 5.0以降)。 - テンプレート:Javadoc:SE – 総称的な比較とオブジェクトの大小関係を判定することができるインタフェース(J2SE 1.2以降)。
- テンプレート:Javadoc:SE – 総称的な反復子とで拡張
for
ループを使用可能にするインタフェース(J2SE 5.0以降)。 - テンプレート:Javadoc:SE, テンプレート:Javadoc:SE, テンプレート:Javadoc:SE,テンプレート:Javadoc:SE, テンプレート:Javadoc:SE – クラスの動的ロード、外部プロセスの生成、ホスト環境が時刻のようなものを尋ねる、情報セキュリティポリシーの施行などをマネージする「システムオペレーション」を提供するクラス。
- テンプレート:Javadoc:SE , テンプレート:Javadoc:SE – sin(正弦)、cos(余弦)、平方根などの数学関数を提供するクラス(
StrictMath
はJ2SE 1.3以降)。 - プリミティブ型をオブジェクトとしてカプセル化されたプリミティブラッパークラス。
- 言語レベル若しくは他の共通例外としてスローされる例外基底クラス。
java.lang
のクラスはソースファイルでimport宣言をせずとも自動的にインポートされる。
テンプレート:Javadoc:SE
java.lang.ref
パッケージは、他の可能な許可するアプリケーションとJava仮想マシン (JVM) ガベージコレクタとの間の限定的な相互関係よりもフレキシブルな参照型を提供する。それは重要なパッケージであり、それに"java.lang"で始まる名前を与えた言語設計者のための言語として十分に中核をなしたが、それはいくぶん特殊目的であり多くの開発者は使わない。このパッケージはJ2SE1.2から追加された。
Javaは多くのガベージコレクトされたプログラミング言語より柔軟な参照システムを持ち、ガベージコレクションに特別な振る舞いを許可する。Javaにある通常の参照は「強参照(strong reference)」として知られている。java.lang.ref
パッケージは三つのそれぞれの参照型—ソフト, 弱, ファントム参照 —を定義している。各々の参照型は特殊な用途のために設計されている。
テンプレート:Javadoc:SE はキャッシュを実装するために使われている。オブジェクトは強参照によって到達不可能であるが(強到達可能strongly reachable)ではない)、ソフト到達可能(softly reachable)と呼ばれるソフト参照によって参照されている。ソフト到達可能なオブジェクトはガベージコレクタの自由裁量によってガベージコレクトされるかもしれない。これは一般的にソフト到達可能なオブジェクトは空きメモリが少ないときのみガベージコレクトされるだろうということを意味する。ところが、それはガベージコレクタの自由裁量にある。意味的に言えば、ソフト参照は「メモリが必要とされなくなるまでこのオブジェクトを保持せよ」ということを意味する。
テンプレート:Javadoc:SE は弱マップを実装するために使われている。強到達可能またはソフト到達可能でなく弱参照によって参照されているオブジェクトは、弱到達可能(weakly reachable)と呼ばれる。弱到達可能なオブジェクトは次の回収サイクルの間にガベージコレクトされる。この振る舞いはクラステンプレート:Javadoc:SEによって使われている。プログラマは弱マップにキー/値ペアを挿入でき、キーがどこからも到達可能でなくなるかどうかを心配する必要がなく、オブジェクトがメモリを占有する可能性を心配しなくてよい。意味的に言えば、弱参照は「他にそれを参照するものが無いときはこのオブジェクトを除去せよ。」を意味する。
テンプレート:Javadoc:SE はガベージコレクションにマークされているオブジェクトを参照するために使われており、ファイナライズされているが、未だに再利用されていない。オブジェクトは強、ソフト、弱到達可能でないが、ファントム到達可能(phantom reachable)と呼ばれるファントム参照によって参照されている。これはファイナライゼーションメカニズムのみによって可能なものよりもよりフレキシブルなクリーンナップを可能にする。意味的に言えば、ファントム参照は「このオブジェクトは長い間必要とされなくなりコレクトされる準備をしている状態でファイナライズされている。」を意味する。
これらの各々の参照型はテンプレート:Javadoc:SEクラスを継承し、リファレント(指示対象オブジェクト)(または、もし参照がクリアされているか参照型がファントムであるならばnull
)への強参照を返すテンプレート:Javadoc:SEメソッド および、リファレンスをクリアするテンプレート:Javadoc:SEメソッドを提供する。
java.lang.ref
もまた参照型が変わるオブジェクトを保持するために上記で検討された各々のアプリケーションが使われるクラステンプレート:Javadoc:SEを定義する。
Reference
が生成されるとき、それは任意にリファレンスキューに登録される。アプリケーションは到達可能性状態に変化する参照を得るリファレンスキュー票を得る。
参照型とリファレンスキューのより首尾よい説明は"Reference Objects and Garbage Collection" を参照。
テンプレート:Javadoc:SE
リフレクションはJavaコード調査や、実行時のJavaコンポーネントやリフレクトされたメンバを使用する上での「リフレクト」を可能にするJava APIの構成要素である。このパッケージにあるクラスは、java.lang.Class
とテンプレート:Javadoc:SEに加えて、デバッガやインタプリタ、オブジェクトインスペクタ(調査)、クラスブラウザのようなアプリケーション、オブジェクトシリアライゼーションやJavaBeansのようなサービスに適合し、(その実行クラスを基礎とする)ターゲットとなるオブジェクトのpublicメンバまたは与えられたクラスによって宣言されたメンバにアクセスする必要がある。このパッケージはJDK1.1より追加された。
リフレクションはインスタンスによって使われ、それらの名前を使ってメソッドを呼び出す、動的プログラミングを許可する着想である。クラス、インタフェース、メソッド、フィールド、コンストラクタはすべて実行時に見つけて利用することができる。メタデータによってサポートされているリフレクションはそのプログラムの近くにあるJVMである。そこにはリフレクションによって呼び出された二つの技術がある。
- Discovery はオブジェクトやクラスの取得に関わり、メンバ、スーパークラス、実装されたインタフェースとそのとき発見された要素を使う可能性の発見に関わる。
- Use by name は要素のシンボル名呼び出し始めて、名付けられた要素を使用する。
Discovery
Discoveryはだいたいオブジェクトから始まり、Class
のオブジェクトを取得するテンプレート:Javadoc:SEメソッドを呼び出す。Class
オブジェクトはクラスの中身を発見する数種のメソッドを持つ。以下にその例を示す:
- テンプレート:Javadoc:SE – クラスまたはインタフェースのpublicメソッドすべてをテンプレート:Javadoc:SEオブジェクトの配列として返す。
- テンプレート:Javadoc:SE – クラスのpublicコンストラクタすべてをテンプレート:Javadoc:SEの配列として返す。
- テンプレート:Javadoc:SE – クラスまたはインタフェースのpublicフィールドすべてをテンプレート:Javadoc:SEオブジェクトの配列として返す。
- テンプレート:Javadoc:SE – クラスまたはインタフェースのメンバ(e.g. 内部クラス)としてのpublicなクラスまたはインタフェースすべてを
Class
の配列として返す。 - テンプレート:Javadoc:SE – クラスまたはインタフェース(インターフェースの場合
null
を返す)のスーパークラスをClass
オブジェクトを返す。 - テンプレート:Javadoc:SE – クラスまたはインタフェースによって実装されているすべてのインタフェースを
Class
オブジェクトの配列として返す。
Use by name
Class
オブジェクトは「クラスリテラル」(e.g. MyClass.class
)を使用することまたは、メンバのシンボル名を使って得られるクラス(e.g. テンプレート:Javadoc:SE). Class
オブジェクト、メンバMethod
、Constructor
、Field
オブジェクト、などの名前による発見を通して得られる。例:
- テンプレート:Javadoc:SE –
Method
オブジェクトを返す。Class...
引数によって特定される引数を受け入れるクラスまたはインタフェースの"methodName"という名のpublicメソッドを表現する。 - テンプレート:Javadoc:SE –
Class...
引数によって特定される引数を受け入れるクラスのpublicコンストラクタを表現するConstructor
オブジェクトを返す。 - テンプレート:Javadoc:SE – クラスまたはインタフェースの名前が"fieildName"であるpublicフィールドを表現する
Field
オブジェクトを返す。
Method
、Constructor
、Field
オブジェクトはクラスのメンバを表現した動的アクセスで利用することができる。例:
- テンプレート:Javadoc:SE –
get()
に渡したオブジェクトのインスタンスからフィールドの値を含むObject
を返す。もしField
オブジェクトがstaticフィールドを表現するときは、Object
引数は無視されてnull
となることがある。) - テンプレート:Javadoc:SE –
invoke()
に渡した第一Object
引数をインスタンスとしてメソッド呼び出しの結果を含むObject
を返す。
Object...
引数に留まるものはメソッドによって渡される。(もしMethod
オブジェクトが静的メソッドであるばあいは第一Object
引数が無視されてnull
となることがある。)
- テンプレート:Javadoc:SE – コンストラクタによって呼び出されて新たに作られた
Object
インスタンスを返す。Object...
引数はコンストラクタへ渡される。(テンプレート:Javadoc:SEによって呼び出されることもできるクラスとしての引数無しコンストラクタに注意すること。)
配列とプロキシ
java.lang.reflect
パッケージもまた静的メソッドを含み配列オブジェクトを巧みに扱うテンプレート:Javadoc:SEクラスと、J2SE1.3以降登場した、特定のインタフェースを実装したプロキシクラスの動的生成をサポートするテンプレート:Javadoc:SEクラスを提供する。
Proxy
クラスの実装はテンプレート:Javadoc:SEインタフェースを実装した補給オブジェクトによって提供される。
InvocationHandler
の テンプレート:Javadoc:SE メソッドはプロキシオブジェクトで呼び出された各々のメソッドに呼ばれる。—第一引数はプロキシオブジェクト、第二引数はプロキシによって実装されたインタフェースメソッドMethod
オブジェクト、第三引数はインタフェースメソッドへ渡す引数の配列である。invoke()
メソッドはプロキシインタフェースメソッドを飛ぶコードを戻り値として含むObject
を戻り値として返す。
テンプレート:Javadoc:SE
java.io
パッケージは入出力(I/O)をサポートするクラスを含む。 パッケージにあるクラスは本来ストリーム指向である。; しかしながら、ランダムアクセスファイル (コンピュータ)としてのクラスもまた提供されている。パッケージで中心となるクラスはそれぞれバイトストリームの読み書きを行う抽象クラスであるテンプレート:Javadoc:SEとテンプレート:Javadoc:SEである。このパッケージもまた多数のファイルシステムとの相互作用をサポートする多少の様々なクラスを持っている。
ストリーム
ストリームクラスはストリームクラスに特色を加えたベースとなるサブクラスを拡張したDecoratorパターンに沿っている。ベースとなるストリームクラスのサブクラスはたいてい以下の特質を用いて名付けられる。:
- ストリームデータの送信元/送信先
- ストリームへ書き込まれた/読み込むデータ型
- ストリームデータ上で行われる追加処理やフィルタリング
ストリームサブクラスはXxx
が特色を記述しStreamType
がInputStream
、OutputStream
、Reader
、Writer
のような名前をもつパターンXxxStreamType
を使って名付けられる。
以下の表はjava.io
パッケージが直にサポートする送信元/送信先を示す:
送信元/送信先 接頭辞 ストリーム型 入出力 クラス バイト (情報) 配列 ( byte[]
)ByteArray
byte in, out テンプレート:Javadoc:SE, テンプレート:Javadoc:SE 文字配列 ( char[]
)CharArray
char in, out テンプレート:Javadoc:SE, テンプレート:Javadoc:SE ファイル File
byte, char in, out テンプレート:Javadoc:SE, テンプレート:Javadoc:SE, テンプレート:Javadoc:SE, テンプレート:Javadoc:SE 文字列 ( StringBuffer
)String
char in, out テンプレート:Javadoc:SE, テンプレート:Javadoc:SE スレッド ( Thread
)Piped
byte, char in, out テンプレート:Javadoc:SE, テンプレート:Javadoc:SE, テンプレート:Javadoc:SE, テンプレート:Javadoc:SE
他の標準ライブラリパッケージは、テンプレート:Javadoc:SEメソッドやJava EEのテンプレート:Javadoc:EEクラスが返すInputStream
のような他の送信先としてストリーム実装を提供する。
データ型ハンドリング、ストリームデータのプロセッシングやフィルタリングはストリームフィルタを通してできあがっている。フィルタクラスはすべて、コンストラクタの引数としてもう一つの互換ストリームオブジェクトを受け入れ、追加された特色とともに囲まれたストリームをデコレート(decorate)する。ベースとなるフィルタクラステンプレート:Javadoc:SE、テンプレート:Javadoc:SE、テンプレート:Javadoc:SE、テンプレート:Javadoc:SEを拡張することでフィルタは生成される。
Reader
とWriter
クラスは真に、バイトを文字にコンバートするためのデータストリームで追加処理を行うバイトストリームである。それらはJ2SE5.0から登場した静的メソッドテンプレート:Javadoc:SEによって返されるテンプレート:Javadoc:SEを使う。テンプレート:Javadoc:SEクラスはInputStream
をReader
へとコンバートし、テンプレート:Javadoc:SEクラスはOutputStream
をWriter
へコンバートする。これら双方のクラスは特別に役立つ文字エンコーディングを許可するコンストラクタを持っている—もしエンコーディングが指定されていなければ、プラットフォームにあるデフォルトエンコーディングを使用する。
以下の表はjava.io
パッケージを直にサポートする他の処理、フィルタを示す。これらのクラスはすべてFilter
クラスに相当するものを継承している。
命令 接頭辞 ストリーム型 入出力 クラス バッファリング Buffered
byte, char in, out テンプレート:Javadoc:SE, テンプレート:Javadoc:SE, テンプレート:Javadoc:SE, テンプレート:Javadoc:SE 「プッシュバック」 最後の値を読む Pushback
byte, char in テンプレート:Javadoc:SE, テンプレート:Javadoc:SE 読込/書込 プリミティブ型 Data
byte in, out テンプレート:Javadoc:SE, テンプレート:Javadoc:SE 直列化(シリアライズ) (読込/書込オブジェクト) Object
byte in, out テンプレート:Javadoc:SE, テンプレート:Javadoc:SE
ランダムアクセス
テンプレート:Javadoc:SEクラスはファイルのランダムアクセス読み書きをサポートする。このクラスはファイル内の次の読込または書込命令を行うバイトオフセットを表現するファイルポインタを使用する。ファイルポインタは読み書きによって無条件に動かされ、 テンプレート:Javadoc:SEまたはテンプレート:Javadoc:SEメソッドによって明確になる。 ファイルポインタのカレントポジションはテンプレート:Javadoc:SEメソッドによって返される。
ファイルシステム
テンプレート:Javadoc:SE クラスはファイルシステムのファイルやディレクトリパスを表現する。 File
オブジェクトはファイル、ディレクトリの生成、削除、リネームや「読み取り専用」や「最終更新タイムスタンプ」のようなファイル属性操作をサポートする。File
オブジェクトはファイルとディレクトリを含むすべてのリストを得るために使われるディレクトリを表現することができる。
テンプレート:Javadoc:SE クラスはバイトの送信元または廃棄先(送信先)を表現するファイル記述子である。一般的にこれはファイルであるが、コンソールやネットワークソケットにすることもできる。 FileDescriptor
オブジェクトはFile
ストリームを生成するために使われている。それらは File
ストリーム、java.net
ソケットやデータグラムソケットから得られる。
テンプレート:Javadoc:SE
J2SE 1.4では、パッケージjava.nio
(NIO または New I/O) がメモリマップドI/O、ときどき劇的にベターなパフォーマンスを得る基本ハードウェアと、よりいっそう親密な入出力命令を容易にするサポートが追加された。java.nio
パッケージはバッファ型サポートを提供する。サブパッケージ テンプレート:Javadoc:SE は文字データとは異なる文字エンコーディングサポートを提供する。サブパッケージ テンプレート:Javadoc:SE はファイルやソケットのようなI/O命令演算能力がある資格を与える接続を表現する「チャネル」サポートを提供する。java.nio.channels
パッケージもまたファイルのきめ細かいロックサポートを提供する。
テンプレート:Javadoc:SE
java.math package (剰余演算を含む)多倍長精度の演算をサポートし暗号鍵を生成するための多倍長の素数生成を提供する。 以下にパッケージのメインクラスを示す:
- テンプレート:Javadoc:SE – 任意精度の符号付き10進数を提供する。
BigDecimal
はRoundingMode
を通して誤差の揺るまいをコントロールすることができる。 - テンプレート:Javadoc:SE – 任意精度の整数を提供する。
BigInteger
による演算は、約21億桁もの巨大な数値を扱わない限り、算術オーバーフローや桁落ちを生じない。標準数値演算に加えて、これは剰余演算、GCD計算、素数判定、素数生成、ビット演算など他様々な演算を提供する。 - テンプレート:Javadoc:SE – 数値演算の精度などのルール設定をカプセル化する。
- テンプレート:Javadoc:SE – 8つの丸め誤差を提供する列挙型である。
テンプレート:Javadoc:SE
java.net
パッケージは他の共通トランザクションと同じくらい良質のHTTPリクエストネットワーク向けに特別なI/Oルーチンを提供する。
テンプレート:Javadoc:SE
java.text
パッケージは文字列をパースするルーチンを実装し、様々な自然言語、ロケールに依存したパースをサポートする。
テンプレート:Javadoc:SE
java.util
パッケージの中心である集約したオブジェクトデータ構造。
パッケージに含まれているものは、デザインパターンを非常に考慮したデータ構造階層、コレクションAPI(コンテナ)である。
特殊パッケージ
テンプレート:Javadoc:SE
Javaアプレット生成をサポートするために作られたjava.applet
パッケージはネットワーク越しにダウンロードされた保護されたサンドボックス上で動くアプリケーションを許可する。セキュリティ制約は簡単にサンドボックスに適用される。開発者は、例えば、それが安全であることを示すために、アプレットに電子署名を適用することができる。(ローカルハードドライブにアクセスするような)制限された処理を行うアプレットの許可を認めるため、そういう行為をユーザに許し、サンドボックスの制限を部分的または全て取り払う。デジタル証明書はThawteやEntrustのような機関によって発行される。
テンプレート:Javadoc:SE
java.beans
パッケージに含まれているものは開発やbean操作のための様々なクラスであり、JavaBeansアーキテクチャによって定義された再利用コンポーネントである。アーキテクチャはコンポーネントのプロパティ操作やそれらのプロパティが変更されたときの発火イベントのメカニズムを提供する。
java.beans
にあるAPIの多くはbeanが結合、カスタマイズ、操作されうるbean編集ツールによる使用として書かれている。beanエディタのとあるタイプは、IDEにあるGUIデザイナである。
テンプレート:Javadoc:SE
The Abstract Windowing Toolkit(AWT)は基本的なGUI命令をサポートするルーチンを含み、 基礎を成すネィティブシステムから基本的なウィンドウズを使用する。Java API(GNUのlibgcjのような)多くの独自実装は何もかも実装しているがしかし、AWTは多くのサーバサイドアプリケーションで使われていない。このパッケージもまたJava 2DグラフィックAPIを含んでいる。
テンプレート:Javadoc:SE
java.rmi
パッケージは異なるJVM上にある2つのJavaアプリケーション間でのRPCをサポートする Java Remote Method Invocationを提供する。
テンプレート:Javadoc:SE
メッセージダイジェストアルゴリズムを含んでいるセキュリティサポートはjava.security
に含まれている。
テンプレート:Javadoc:SE
JDBC API (SQLデータベース接続で使用)の実装はjava.sql
パッケージにまとめられている。
テンプレート:Javadoc:SE
テンプレート:Main アプリケーション間のリモート間通信を提供し、RMI over IIOPプロトコルを使用する。このプロトコルはRMIとCORBAと連携させる。
テンプレート:Javadoc:SE
テンプレート:Main general inter ORB protocolを使用するアプリケーション間のリモート間通信をサポートし、CORBAの他のフィーチャーをサポートする。RMIとRMI-IIOPと同じく、このパッケージは(通常、ネットワーク経由で)他の仮想マシン上で動いているオブジェクトのリモートメソッドを呼ぶためにある。 すべての通信可能性からCORBAは様々なプログラミング言語でもっともポータブルである。しかしながら、それはCORBAを理解することをもいくぶん難しくしている。
テンプレート:Javadoc:SE
Swing はプラットフォーム非依存ウィジェット・ツールキットを提供するjava.awt
を構築するルーチンの集合である。SwingはOS独自のGUIサポートに頼る替わりに、ユーザインタフェースコンポーネントをレンダリングするために2次元描画ルーチンを使用する。
Swingは、GUI上のウィジェットは基礎を成すネイティブシステムからそれらを見習うことができるように、PLAFs(pluggable looks and feels))をサポートし他に頼らない非常にリッチなシステムである。システム全体に行き渡っているデザインパターン、特にMVCパターンの修正は機能と外観との間の結合度を緩めている。 一つの不調和は、(J2SE1.3での)フォントは基本を成すネイティブシステムに依存して描かれていることであり、Javaでは描かれない、限定的なテキストポータビリティである。次善策としては、ビットマップフォントを使うことが挙げられる。一般的に「レイアウト」は 美学的にプラットフォームを横渡る一貫したGUIからなる構成要素を使用維持する。
テンプレート:Javadoc:SE
様々なウェブブラウザやウェブボットの記述に関して使われるエラーに寛大なHTMLパーサを提供する。
外部リンク
- Oracle - Java SE テンプレート:Ref-ja
- JSR 336 (Java SE 7) テンプレート:Ref-en
- JSR 270 (Java SE 6) テンプレート:Ref-en
- JSR 176 (J2SE 5.0) テンプレート:Ref-en
- JSR 59 (J2SE 1.4) テンプレート:Ref-en