原文と比べた結果、この記事には多数の(または内容の大部分に影響ある)誤訳 があることが判明しています。情報の利用には注意してください。 正確な表現に改訳できる方を求めています。 (2019年5月 )
Java Platform, Standard Edition または Java SE は、多くのJavaプラットフォーム プログラムで利用されるJava API の集合体である。Java仮想マシン 、API などから構成される。バージョン1.2からバージョン5.0までは Java 2 Platform, Standard Edition または J2SE と呼ばれていた(詳細はJavaバージョン履歴 を参照)。
J2SEバージョン1.4 (Merlin) 以降、Java SEプラットフォームはJava Community Process (JCP) の下で開発されている。JSR 59はJ2SE 1.4の包括仕様であり、JSR 176はJ2SE 5.0 (Tiger) を、JSR 270はJava SE 6 (Mustang) を規定している。Java SE 7 (Dolphin) はJSR 336の下でリリースされた。
Java SEでは標準的な機能のみが定められており、サーバ 関連の機能についてはJava SEを拡張した企業向けのエディションであるJakarta EE (旧称: Java Platform, Enterprise Edition / Java EE)にて定義されている。
下記は主要なJava SEパッケージの説明である。全てのパッケージリストはJava SE 9 API Javadocs を参照。
一般的なパッケージ
Java の基本的なパッケージ。
パッケージ java.lang
は、言語とランタイム(実行) システムに緊密な基本的なクラス とインタフェース を含む。これはクラス階層 を形成する基底クラス、言語仕様に密接な型、基本的な例外 、数学関数、スレッド 、セキュリティ関数、下位にあるネイティブシステムに関する情報も含む。
java.lang
の主なクラス:
java.lang
のクラスはソースファイル でimport宣言をせずとも自動的にインポートされる。
java.lang.ref
パッケージは、他の可能な許可するアプリケーションとJava仮想マシン (JVM) ガベージコレクタ との間の限定的な相互関係よりも柔軟な参照 型を提供する。それは重要なパッケージであり、それに"java.lang"で始まる名前を与えた言語設計者のための言語として十分に中核をなしたが、それはいくぶん特殊目的であり多くの開発者は使わない。このパッケージはJ2SE1.2から追加された。
Javaは多くのガベージコレクトされたプログラミング言語 より柔軟な参照 システムを持ち、ガベージコレクションに特別な振る舞いを許可する。Javaにある通常の(言語組み込みの)参照は「強参照 (strong reference )」として知られている。java.lang.ref
パッケージは3つの弱い参照 型(ソフト参照 SoftReference
、弱参照 WeakReference
、ファントム参照 PhantomReference
)を定義している。各々の参照型は特殊な用途のために設計されている。
SoftReference
はキャッシュ を実装するために使われている。オブジェクトは強到達可能 (strongly reachable ) つまり強参照によって到達可能ではないが、ソフト到達可能 (softly reachable ) と呼ばれるソフト参照によって参照されている。ソフト到達可能なオブジェクトはガベージコレクタの自由裁量によってガベージコレクトされるかもしれない。これは一般的にソフト到達可能なオブジェクトは空きメモリが少ないときのみガベージコレクトされるだろうということを意味する。ところが、それはガベージコレクタの自由裁量にある。意味的に言えば、ソフト参照は「メモリが必要とされなくなるまでこのオブジェクトを保持せよ」ということを意味する。
WeakReference
は弱マップを実装するために使われている。強到達可能またはソフト到達可能でなく弱参照によって参照されているオブジェクトは、弱到達可能 (weakly reachable ) と呼ばれる。弱到達可能なオブジェクトは次の回収サイクルの間にガベージコレクトされる。この振る舞いはクラスjava.util.WeakHashMap
によって使われている。プログラマは弱マップにキー/値ペアを挿入でき、キーがどこからも到達可能でなくなるかどうかを心配する必要がなく、オブジェクトがメモリを占有する可能性を心配しなくてよい。意味的に言えば、弱参照は「他にそれを参照するものが無いときはこのオブジェクトを除去せよ」を意味する。
PhantomReference
はガベージコレクションにマークされているオブジェクトを参照するために使われており、ファイナライズ されているが、未だに再利用されていない。オブジェクトは強、ソフト、弱到達可能でないが、ファントム到達可能 (phantom reachable ) と呼ばれるファントム参照によって参照されている。これはファイナライゼーションメカニズムのみによって可能なものよりもより柔軟なクリーンナップを可能にする。意味的に言えば、ファントム参照は「このオブジェクトは長い間必要とされなくなりコレクトされる準備をしている状態でファイナライズされている。」を意味する。
これらの各々の参照型はReference
クラスを継承し、リファレント(指示対象オブジェクト)(または、もし参照がクリアされているか参照型がファントムであるならばnull
)への強参照を返すget()
メソッド および、リファレンスをクリアするclear()
メソッドを提供する。
java.lang.ref
もまた参照型が変わるオブジェクトを保持するために上記で検討された各々のアプリケーションが使われるクラスReferenceQueue
を定義する。
Reference
が生成されるとき、それは任意にリファレンスキューに登録される。アプリケーションは到達可能性状態の変化した参照を得るためのリファレンスキューを監視する。
参照型とリファレンスキューのより首尾よい説明は"Reference Objects and Garbage Collection " を参照。
リフレクション はJavaコード調査や、実行時のJavaコンポーネントやリフレクトされたメンバを使用する上での「リフレクト」を可能にするJava APIの構成要素である。このパッケージにあるクラスは、java.lang.Class
とjava.lang.Package
に加えて、デバッガ やインタプリタ 、オブジェクトインスペクタ (調査)、クラスブラウザ のようなアプリケーション、オブジェクトシリアライゼーション やJavaBeans のようなサービスに適合し、(その実行クラスを基礎とする)ターゲットとなるオブジェクトのpublicメンバまたは与えられたクラスによって宣言されたメンバにアクセスする必要がある。このパッケージはJDK1.1より追加された。
リフレクションはインスタンスによって使われ、それらの名前を使ってメソッドを呼び出す、動的プログラミング を許可する着想である。クラス、インタフェース、メソッド、フィールド 、コンストラクタ はすべて実行時に見つけて利用することができる。メタデータ によってサポートされているリフレクションはそのプログラムの近くにあるJVMである。そこにはリフレクションによって呼び出された二つの技術がある。
Discovery はオブジェクトやクラスの取得に関わり、メンバ、スーパークラス、実装されたインタフェースとそのとき発見された要素を使う可能性の発見に関わる。
Use by name は要素のシンボル名呼び出し始めて、名付けられた要素を使用する。
Discovery
Discoveryはだいたいオブジェクトから始まり、Class
のオブジェクトを取得するObject.getClass()
メソッドを呼び出す。Class
オブジェクトはクラスの中身を発見する数種のメソッドを持つ。以下にその例を示す:
Use by name
Class
オブジェクトは「クラスリテラル 」(e.g. MyClass.class
) を使用すること、またはメンバのシンボル名を使うことで得られる (e.g. Class.forName("mypackage.MyClass")
)。Class
オブジェクト、メンバMethod
、Constructor
、Field
オブジェクト、などの名前による発見を通して得られる。例:
Method
、Constructor
、Field
オブジェクトはクラスのメンバを表現した動的アクセスで利用することができる。例:
Object...
引数に留まるものはメソッドによって渡される。(もしMethod
オブジェクトが静的メソッド である場合は第一Object
引数が無視されてnull
となることがある。)
java.lang.reflect
パッケージもまた静的メソッドを含み配列オブジェクトを巧みに扱うArray
クラスと、J2SE1.3以降登場した、特定のインタフェースを実装したプロキシクラスの動的生成をサポートするProxy
クラスを提供する。
Proxy
クラスの実装はInvocationHandler
インタフェースを実装した補給オブジェクトによって提供される。
InvocationHandler
の []) invoke(Object, Method, Object[])
メソッドはプロキシオブジェクトで呼び出された各々のメソッドに呼ばれる。—第一引数はプロキシオブジェクト、第二引数はプロキシによって実装されたインタフェースメソッドMethod
オブジェクト、第三引数はインタフェースメソッドへ渡す引数の配列である。invoke()
メソッドはプロキシインタフェースメソッドを飛ぶコードを戻り値として含むObject
を戻り値として返す。
java.io
パッケージは入出力(I/O) をサポートするクラスを含む。 パッケージにあるクラスは本来ストリーム指向 である。; しかしながら、ランダムアクセス ファイル (コンピュータ) としてのクラスもまた提供されている。パッケージで中心となるクラスはそれぞれバイトストリーム の読み書きを行う抽象クラス であるInputStream
とOutputStream
である。このパッケージもまた多数のファイルシステム との相互作用をサポートする多少の様々なクラスを持っている。
ストリーム
ストリームクラスはストリームクラスに特色を加えたベースとなるサブクラスを拡張したDecoratorパターン に沿っている。ベースとなるストリームクラスのサブクラスはたいてい以下の特質を用いて名付けられる。:
ストリームデータの送信元/送信先
ストリームへ書き込まれた/読み込むデータ型
ストリームデータ上で行われる追加処理やフィルタリング
ストリームサブクラスはXxx
が特色を記述しStreamType
がInputStream
、OutputStream
、Reader
、Writer
のような名前をもつパターン XxxStreamType
を使って名付けられる。
以下の表はjava.io
パッケージが直にサポートする送信元/送信先を示す:
java.ioパッケージが直にサポートする送信元/送信先
送信元/送信先
接頭辞
ストリーム型
入出力
クラス
バイト (情報) 配列 (byte[]
)
ByteArray
byte
in, out
ByteArrayInputStream
, ByteArrayOutputStream
文字配列 (char[]
)
CharArray
char
in, out
CharArrayReader
, CharArrayWriter
ファイル
File
byte, char
in, out
FileInputStream
, FileOutputStream
, FileReader
, FileWriter
文字列 (StringBuffer
)
String
char
in, out
StringReader
, StringWriter
スレッド (Thread
)
Piped
byte, char
in, out
PipedInputStream
, PipedOutputStream
, PipedReader
, PipedWriter
他の標準ライブラリパッケージは、java.net.Socket.getInputStream()
メソッドやJava EEのjavax.servlet.ServletOutputStream
クラスが返すInputStream
のような他の送信先としてストリーム実装を提供する。
データ型ハンドリング、ストリームデータのプロセッシングやフィルタリングはストリームフィルタ を通してできあがっている。フィルタクラスはすべて、コンストラクタの引数としてもう一つの互換ストリームオブジェクトを受け入れ、追加された特色とともに囲まれたストリームをデコレート(decorate )する。ベースとなるフィルタクラスFilterInputStream
、FilterOutputStream
、FilterReader
、FilterWriter
を拡張することでフィルタは生成される。
Reader
とWriter
クラスは真に、バイトを文字にコンバートするためのデータストリームで追加処理を行うバイトストリームである。それらはJ2SE5.0から登場した静的メソッドjava.nio.charset.Charset.defaultCharset()
によって返されるCharset
を使う。InputStreamReader
クラスはInputStream
をReader
へとコンバートし、OutputStreamWriter
クラスはOutputStream
をWriter
へコンバートする。これら双方のクラスは特別に役立つ文字エンコーディングを許可するコンストラクタを持っている—もしエンコーディングが指定されていなければ、プラットフォームにあるデフォルトエンコーディングを使用する。
以下の表はjava.io
パッケージを直にサポートする他の処理、フィルタを示す。これらのクラスはすべてFilter
クラスに相当するものを継承している。
java.ioパッケージを直にサポートする他の処理、フィルタ
命令
接頭辞
ストリーム型
入出力
クラス
バッファリング
Buffered
byte, char
in, out
BufferedInputStream
, BufferedOutputStream
, BufferedReader
, BufferedWriter
「プッシュバック」 最後の値を読む
Pushback
byte, char
in
PushbackInputStream
, PushbackReader
読込/書込 プリミティブ型
Data
byte
in, out
DataInputStream
, DataOutputStream
直列化 (シリアライズ) (読込/書込オブジェクト)
Object
byte
in, out
ObjectInputStream
, ObjectOutputStream
ランダムアクセス
RandomAccessFile
クラスはファイルのランダムアクセス 読み書きをサポートする。このクラスはファイル内の次の読込または書込命令を行うバイトオフセットを表現するファイルポインタ を使用する。ファイルポインタは読み書きによって無条件に動かされ、
seek(long)
またはskipBytes(int)
メソッドによって明確になる。
ファイルポインタのカレントポジションはgetFilePointer()
メソッドによって返される。
ファイルシステム
File
クラスはファイルシステム のファイル やディレクトリ パス を表現する。 File
オブジェクトはファイル、ディレクトリの生成、削除、リネームや「読み取り専用」や「最終更新タイムスタンプ 」のようなファイル属性 操作をサポートする。File
オブジェクトはファイルとディレクトリを含むすべてのリストを得るために使われるディレクトリを表現することができる。
FileDescriptor
クラスはバイトの送信元または廃棄先(送信先)を表現するファイル記述子 である。一般的にこれはファイルであるが、コンソール やネットワークソケット にすることもできる。 FileDescriptor
オブジェクトはFile
ストリームを生成するために使われている。それらは File
ストリーム、java.net
ソケットやデータグラム ソケットから得られる。
J2SE 1.4では、パッケージjava.nio
(NIO または New I/O) がメモリマップドI/O 、ときどき劇的にベターなパフォーマンスを得る基本ハードウェアと、よりいっそう親密な入出力 命令を容易にするサポートが追加された。java.nio
パッケージはバッファ型サポートを提供する。サブパッケージ java.nio.charset
は文字データとは異なる文字エンコーディング サポートを提供する。サブパッケージ java.nio.channels
はファイルやソケットのようなI/O命令演算能力がある資格を与える接続を表現する「チャネル 」サポートを提供する。java.nio.channels
パッケージもまたファイルのきめ細かいロック サポートを提供する。
java.math package (剰余 演算を含む)多倍長精度の演算をサポートし暗号 鍵を生成するための多倍長の素数 生成を提供する。 以下にパッケージのメインクラスを示す:
java.net
パッケージは他の共通トランザクションと同じくらい良質のHTTP リクエストネットワーク向けに特別なI/Oルーチンを提供する。
java.text
パッケージは文字列をパースするルーチンを実装し、様々な自然言語、ロケールに依存したパースをサポートする。
java.util
パッケージの中心である集約したオブジェクトデータ構造 。
パッケージに含まれているものは、デザインパターン を非常に考慮したデータ構造階層、コレクションAPI (コンテナ )である。
特殊パッケージ
Javaアプレット 生成をサポートするために作られたjava.applet
パッケージはネットワーク越しにダウンロードされた保護されたサンドボックス 上で動くアプリケーションを許可する。セキュリティ制約は簡単にサンドボックスに適用される。開発者は、例えば、それが安全であることを示すために、アプレットに電子署名 を適用することができる。(ローカルハードドライブにアクセスするような)制限された処理を行うアプレットの許可を認めるため、そういう行為をユーザに許し、サンドボックスの制限を部分的または全て取り払う。デジタル証明書はThawte やEntrust のような機関によって発行される。
java.beans
パッケージに含まれているものは開発やbean操作のための様々なクラスであり、JavaBeansアーキテクチャ によって定義された再利用コンポーネントである。アーキテクチャはコンポーネントのプロパティ操作やそれらのプロパティが変更されたときの発火イベントのメカニズムを提供する。
java.beans
にあるAPIの多くはbeanが結合、カスタマイズ、操作されうるbean編集ツールによる使用として書かれている。beanエディタのとあるタイプは、IDE にあるGUI デザイナである。
The Abstract Windowing Toolkit (AWT)は基本的なGUI 命令をサポートするルーチンを含み、
基礎を成すネィティブシステムから基本的なウィンドウズを使用する。Java API(GNUのlibgcj のような)多くの独自実装は何もかも実装しているがしかし、AWTは多くのサーバサイド アプリケーションで使われていない。このパッケージもまたJava 2D グラフィックAPIを含んでいる。
java.rmi
パッケージは異なるJVM上にある2つのJavaアプリケーション間でのRPC をサポートする Java Remote Method Invocation を提供する。
メッセージダイジェストアルゴリズムを含んでいるセキュリティサポートはjava.security
に含まれている。
JDBC API (SQL データベース 接続で使用)の実装はjava.sql
パッケージにまとめられている。
アプリケーション間のリモート間通信を提供し、RMI over IIOP プロトコル を使用する。このプロトコルはRMIとCORBA と連携させる。
general inter ORB protocol を使用するアプリケーション間のリモート間通信をサポートし、CORBA の他のフィーチャー をサポートする。RMI とRMI-IIOP と同じく、このパッケージは(通常、ネットワーク経由で)他の仮想マシン 上で動いているオブジェクトのリモートメソッドを呼ぶためにある。 すべての通信可能性からCORBAは様々なプログラミング言語でもっともポータブルである。しかしながら、それはCORBAを理解することをもいくぶん難しくしている。
Swing はプラットフォーム非依存のウィジェット・ツールキット を提供するjava.awt
を基礎とするルーチンの集合である。Swingは下層のネイティブOS 独自のGUI サポートに頼る代わりに、ユーザインタフェース コンポーネント をレンダリングするために2次元描画ルーチンを使用する。
GUI上のウィジェットが下層のネイティブシステムから模倣することができるように、Swingは着脱可能なルック・アンド・フィール (PLAFs; pluggable looks and feels ) をサポートする。システム全体に行き渡っているデザインパターン 、特にMVC パターンの改良版は、機能と外観との間の結合度 を緩めている。1点、統一されていないのは、(J2SE 1.3現在において)フォントがJavaではなく下層のネイティブシステムによって描画されるということであり、これによりテキスト移植性を限定してしまっている。次善策としては、ビットマップ フォントを使うことが挙げられる。一般的に「レイアウト 」が使用され、これは要素をクロスプラットフォームかつ審美眼的に一貫したGUIに保つ。
様々なウェブブラウザ やウェブボット の記述に関して使われる、エラー耐性のあるHTML パーサを提供する。
関連項目
ウィキブックスに
Java 関連の解説書・教科書があります。
外部リンク
ウィキブックスに
Java 関連の解説書・教科書があります。
プラットフォーム オラクルのテクノロジー プラットフォーム技術 主なサードパーティ技術 歴史 主要なJVM言語 コミュニティ
同社はオラクル により2010年に買収された。 人物 ハードウェア
ワークステーション、 サーバ プロセッサ ネットワーク コンピュータ その他
ソフトウェア HPC 研究 教育 コミュニティ
カテゴリ