この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。出典を追加して記事の信頼性向上にご協力ください。(このテンプレートの使い方)
出典検索?: "Java Platform, Standard Edition"
原文と比べた結果、この記事には多数の(または内容の大部分に影響ある)誤訳があることが判明しています。情報の利用には注意してください。正確な表現に改訳できる方を求めています。(2019年5月)
Javaのエディション
Javaカード
Java ME (Micro)
Java SE (Standard)
Jakarta EE
JavaFX
テンプレートを表示
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.lang
Javaの基本的なパッケージ。
パッケージ java.lang は、言語とランタイム(実行)システムに緊密な基本的なクラスとインタフェースを含む。これはクラス階層を形成する基底クラス、言語仕様に密接な型、基本的な例外、数学関数、スレッド、セキュリティ関数、下位にあるネイティブシステムに関する情報も含む。
java.langの主なクラス:
Object ? 全てのクラス階層の頂点に立つクラス。関連項目として、Javaの文法#Objectクラスのメソッドを参照。
Enum ? 列挙クラスの基本クラス (J2SE 5.0以降)。
Class ? Javaの型情報の根幹となるクラス。特にリフレクションシステムで重要な役割を果たす。
Throwable ? 例外クラス階層の基底クラスとなるクラス。
Error, Exception, RuntimeException ? 各例外型の基底クラス。RuntimeExceptionはthrowやthrows宣言をせずとも実行時に起こる例外を指すクラスのスーパークラスであり、Exceptionのサブクラスでもある。Exception、ErrorはThrowableのサブクラス。
Thread ? 薄く抽象化されたスレッドの操作を提供するクラス。
String ? 文字列と文字列リテラルを表現するクラス。
StringBuffer, StringBuilder ? 文字列操作機能を提供するクラス。StringBuilderはJ2SE 5.0以降。
Comparable ? 総称的な比較とオブジェクトの大小関係を判定することができるインタフェース (J2SE 1.2以降)。
Iterable ? 総称的な反復子とで拡張forループを使用可能にするインタフェース (J2SE 5.0以降)。
ClassLoader, Process, Runtime, SecurityManager, System ? クラスの動的ロード、外部プロセスの生成、時刻などを問い合わせるホスト環境、情報セキュリティポリシーの執行などを管理する「システムオペレーション」を提供するクラス。
Math, StrictMath ? sin (正弦)、cos (余弦)、sqrt (平方根) などの数学関数を提供するクラス。実行環境に依存しない演算結果を保証するStrictMathはJ2SE 1.3以降。
プリミティブ型をオブジェクトとしてカプセル化するためのプリミティブラッパークラス。
言語レベルもしくは他の共通例外としてスローされる例外基底クラス。[要説明]
java.langのクラスはソースファイルでimport宣言をせずとも自動的にインポートされる。
java.lang.ref
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が生成されるとき、それは任意にリファレンスキューに登録される。アプリケーションは到達可能性状態の変化した参照を得るためのリファレンスキューを監視する。