Java Platform, Standard Edition

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が生成されるとき、それは任意にリファレンスキューに登録される。アプリケーションは到達可能性状態の変化した参照を得るためのリファレンスキューを監視する。
参照型とリファレンスキューのより首尾よい説明は"Reference Objects and Garbage Collection" を参照。

配列とプロキシ

java.lang.reflectパッケージもまた静的メソッドを含み配列オブジェクトを巧みに扱うArrayクラスと、J2SE1.3以降登場した、特定のインタフェースを実装したプロキシクラスの動的生成をサポートするProxyクラスを提供する。
Proxyクラスの実装はInvocationHandlerインタフェースを実装した補給オブジェクトによって提供される。
InvocationHandlerの []) invoke(Object, Method, Object[]) メソッドはプロキシオブジェクトで呼び出された各々のメソッドに呼ばれる。—第一引数はプロキシオブジェクト、第二引数はプロキシによって実装されたインタフェースメソッドMethodオブジェクト、第三引数はインタフェースメソッドへ渡す引数の配列である。invoke()メソッドはプロキシインタフェースメソッドを飛ぶコードを戻り値として含むObjectを戻り値として返す。

java.io

java.ioパッケージは入出力(I/O)をサポートするクラスを含む。 パッケージにあるクラスは本来ストリーム指向である。; しかしながら、ランダムアクセスファイル (コンピュータ)としてのクラスもまた提供されている。パッケージで中心となるクラスはそれぞれバイトストリームの読み書きを行う抽象クラスであるInputStreamとOutputStreamである。このパッケージもまた多数のファイルシステムとの相互作用をサポートする多少の様々なクラスを持っている。

ランダムアクセス

RandomAccessFileクラスはファイルのランダムアクセス読み書きをサポートする。このクラスはファイル内の次の読込または書込命令を行うバイトオフセットを表現するファイルポインタを使用する。ファイルポインタは読み書きによって無条件に動かされ、
seek(long)またはskipBytes(int)メソッドによって明確になる。
ファイルポインタのカレントポジションはgetFilePointer()メソッドによって返される。

ファイルシステム

File クラスはファイルシステムのファイルやディレクトリパスを表現する。  Fileオブジェクトはファイル、ディレクトリの生成、削除、リネームや「読み取り専用」や「最終更新タイムスタンプ」のようなファイル属性操作をサポートする。File オブジェクトはファイルとディレクトリを含むすべてのリストを得るために使われるディレクトリを表現することができる。
FileDescriptor クラスはバイトの送信元または廃棄先(送信先)を表現するファイル記述子である。一般的にこれはファイルであるが、コンソールやネットワークソケットにすることもできる。 FileDescriptor オブジェクトはFile ストリームを生成するために使われている。それらは File ストリーム、java.net ソケットやデータグラムソケットから得られる。

java.nio

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.net

java.net パッケージは他の共通トランザクションと同じくらい良質のHTTPリクエストネットワーク向けに特別なI/Oルーチンを提供する。

java.text

java.text パッケージは文字列をパースするルーチンを実装し、様々な自然言語、ロケールに依存したパースをサポートする。

java.util

java.utilパッケージの中心である集約したオブジェクトデータ構造。
パッケージに含まれているものは、デザインパターンを非常に考慮したデータ構造階層、コレクションAPI(コンテナ)である。

java.applet

Javaアプレット生成をサポートするために作られたjava.appletパッケージはネットワーク越しにダウンロードされた保護されたサンドボックス上で動くアプリケーションを許可する。セキュリティ制約は簡単にサンドボックスに適用される。開発者は、例えば、それが安全であることを示すために、アプレットに電子署名を適用することができる。(ローカルハードドライブにアクセスするような)制限された処理を行うアプレットの許可を認めるため、そういう行為をユーザに許し、サンドボックスの制限を部分的または全て取り払う。デジタル証明書はThawteやEntrustのような機関によって発行される。

java.beans

java.beansパッケージに含まれているものは開発やbean操作のための様々なクラスであり、JavaBeansアーキテクチャによって定義された再利用コンポーネントである。アーキテクチャはコンポーネントのプロパティ操作やそれらのプロパティが変更されたときの発火イベントのメカニズムを提供する。
java.beansにあるAPIの多くはbeanが結合、カスタマイズ、操作されうるbean編集ツールによる使用として書かれている。beanエディタのとあるタイプは、IDEにあるGUIデザイナである。

java.awt

The Abstract Windowing Toolkit(AWT)は基本的なGUI命令をサポートするルーチンを含み、
基礎を成すネィティブシステムから基本的なウィンドウズを使用する。Java API（GNUのlibgcjのような）多くの独自実装は何もかも実装しているがしかし、AWTは多くのサーバサイドアプリケーションで使われていない。このパッケージもまたJava 2DグラフィックAPIを含んでいる。

java.rmi

java.rmi パッケージは異なるJVM上にある2つのJavaアプリケーション間でのRPCをサポートする Java Remote Method Invocationを提供する。

java.security

メッセージダイジェストアルゴリズムを含んでいるセキュリティサポートはjava.security に含まれている。

java.sql

JDBC API (SQLデータベース接続で使用)の実装はjava.sqlパッケージにまとめられている。

javax.rmi

アプリケーション間のリモート間通信を提供し、RMI over IIOPプロトコルを使用する。このプロトコルはRMIとCORBAと連携させる。

org.omg.CORBA

general inter ORB protocolを使用するアプリケーション間のリモート間通信をサポートし、CORBAの他のフィーチャーをサポートする。RMIとRMI-IIOPと同じく、このパッケージは(通常、ネットワーク経由で)他の仮想マシン上で動いているオブジェクトのリモートメソッドを呼ぶためにある。 すべての通信可能性からCORBAは様々なプログラミング言語でもっともポータブルである。しかしながら、それはCORBAを理解することをもいくぶん難しくしている。

javax.swing

Swingはプラットフォーム非依存のウィジェット・ツールキットを提供するjava.awtを基礎とするルーチンの集合である。Swingは下層のネイティブOS独自のGUIサポートに頼る代わりに、ユーザインタフェースコンポーネントをレンダリングするために2次元描画ルーチンを使用する。
GUI上のウィジェットが下層のネイティブシステムから模倣することができるように、Swingは着脱可能なルック・アンド・フィール (PLAFs; pluggable looks and feels) をサポートする。システム全体に行き渡っているデザインパターン、特にMVCパターンの改良版は、機能と外観との間の結合度を緩めている。1点、統一されていないのは、(J2SE 1.3現在において) フォントがJavaではなく下層のネイティブシステムによって描画されるということであり、これによりテキスト移植性を限定してしまっている。次善策としては、ビットマップフォントを使うことが挙げられる。一般的に「レイアウト」が使用され、これは要素をクロスプラットフォームかつ審美眼的に一貫したGUIに保つ。

javax.swing.text.html.parser

様々なウェブブラウザやウェブボットの記述に関して使われる、エラー耐性のあるHTMLパーサを提供する。