GeezerVison is showing ja.wikipedia.org — Java Platform, Standard Edition - Wikipedia
| 原文と比べた結果、この記事には多数の(または内容の大部分に影響ある)誤訳があることが判明しています。情報の利用には注意してください。 正確な表現に改訳できる方を求めています。 (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 2から8まではJava SEを拡張した企業向けのエディションであるJava Platform, Enterprise Edition (Java EE) にて定義されていた。Java 9以降は、上位互換というわけでは無いが、Eclipse FoundationがJakarta EEとして引き継いでいる。
java.baseモジュールのパッケージ
下記は主要なJava SEパッケージの説明である。全てのパッケージリストはJava SE 26 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 |
| 文字列 | 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 |
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パッケージは、(剰余演算を含む)多倍長精度の演算をサポートし、暗号鍵を生成するための多倍長の素数生成を提供する。以下にパッケージの主要なクラスを示す:
java.net パッケージは他の共通トランザクションと同じくらい良質のHTTPリクエストネットワーク向けに特別なI/Oルーチンを提供する。
メッセージダイジェストアルゴリズムを含んでいるセキュリティサポートはjava.security に含まれている。
java.text パッケージは文字列をパースするルーチンを実装し、様々な自然言語、ロケールに依存したパースをサポートする。
java.desktopモジュールのパッケージ
java.desktopモジュールにはデスクトップアプリに必要なパッケージが集められている。
java.beansパッケージに含まれているものは開発やbean操作のための様々なクラスであり、JavaBeansアーキテクチャによって定義された再利用コンポーネントである。アーキテクチャはコンポーネントのプロパティ操作やそれらのプロパティが変更されたときの発火イベントのメカニズムを提供する。
java.beansにあるAPIの多くはbeanが結合、カスタマイズ、操作されうるbean編集ツールによる使用として書かれている。beanエディタのとあるタイプは、IDEにあるGUIデザイナである。
Swingはプラットフォーム非依存のウィジェット・ツールキットを提供するjava.awtを基礎とするルーチンの集合である。Swingは下層のネイティブOS独自のGUIサポートに頼る代わりに、ユーザインタフェースコンポーネントをレンダリングするために2次元描画ルーチンを使用する。
GUI上のウィジェットが下層のネイティブシステムから模倣することができるように、Swingは着脱可能なルック・アンド・フィール (PLAFs; pluggable looks and feels) をサポートする。システム全体に行き渡っているデザインパターン、特にMVCパターンの改良版は、機能と外観との間の結合度を緩めている。1点、統一されていないのは、(J2SE 1.3現在において)フォントがJavaではなく下層のネイティブシステムによって描画されるということであり、これによりテキスト移植性を限定してしまっている。次善策としては、ビットマップフォントを使うことが挙げられる。一般的に「レイアウト」が使用され、これは要素をクロスプラットフォームかつ審美眼的に一貫したGUIに保つ。
廃止されたパッケージ
java.applet
Javaアプレット生成をサポートするために作られたjava.appletパッケージはネットワーク越しにダウンロードされた保護されたサンドボックス上で動くアプリケーションを許可する。セキュリティ制約は簡単にサンドボックスに適用される。開発者は、例えば、それが安全であることを示すために、アプレットに電子署名を適用することができる。(ローカルハードドライブにアクセスするような)制限された処理を行うアプレットの許可を認めるため、そういう行為をユーザに許し、サンドボックスの制限を部分的または全て取り払う。デジタル証明書はThawteやEntrustのような機関によって発行される。
Java 11でJavaアプレット(appletviewer)は廃止され、使用できないにもかかわらずAPIが残っていたが、APIもJava 26で取り除かれた。[1]
外部リンク
|
|---|
|
同社はオラクルにより2010年に買収された。 | | 人物 | |
|---|
| ハードウェア |
ワークステーション、 サーバ | |
|---|
| プロセッサ | |
|---|
ネットワーク コンピュータ | |
|---|
| その他 | |
|---|
|
|---|
| ソフトウェア | |
|---|
| HPC | |
|---|
| 研究 | |
|---|
| 教育 | |
|---|
| コミュニティ | |
|---|
カテゴリ |
|