| プレーヤーソフトウェア | Java |
|---|---|
| プログラミング言語 | Java |
| 申請 | 組み込みシステム、モバイルデバイス |
| 状態 | アクティブ |
| ライセンス | Oracleによる独自のライセンス |
| Webサイト | www.oracle.com/java/technologies/java-se-glance.html |
Java Platform, Standard Edition ( Java SE ) は、デスクトップ環境やサーバー環境向けの移植可能なコードなど、 独立したJava サポートプラットフォーム上でアプリケーションを実行するためのコンピューティング プラットフォーム、技術標準です。 [ 1 ] [ 2 ] Java SE は以前はJava 2 Platform, Standard Edition ( J2SE ) として知られていました。
このプラットフォームはJavaプログラミング言語を使用しており、 Java ソフトウェアプラットフォームファミリーの一部です。Java SE は、 Java クラスライブラリのJava APIなど、さまざまな汎用APIを定義しており、 Java 言語仕様とJava 仮想マシン仕様も含まれています。 [ 3 ] OpenJDK はバージョン 7 以降、公式のリファレンス実装となっています。[ 4 ] [ 5 ] [ 6 ]
The platform was known as Java 2 Platform, Standard Edition or J2SE from version 1.2, until the name was changed to Java Platform, Standard Edition or Java SE in version 1.5. The "SE" is used to distinguish the base platform from the Enterprise Edition (Java EE) and Micro Edition (Java ME) platforms. The "2" was originally intended to emphasize the major changes introduced in version 1.2, but was removed in version 1.6. The naming convention has been changed several times over the Java version history. Starting with J2SE 1.4 (Merlin), Java SE has been developed under the Java Community Process, which produces descriptions of proposed and final specifications for the Java platform called Java Specification Requests (JSR).[7] JSR 59 was the umbrella specification for J2SE 1.4 and JSR 176 specified J2SE 5.0 (Tiger). Java SE 6 (Mustang) was released under JSR 270.
Java Platform, Enterprise Edition (Java EE) is a related specification that includes all the classes in Java SE, plus a number that are more useful to programs that run on servers as opposed to workstations.
Java Platform, Micro Edition (Java ME) is a related specification intended to provide a certified collection of Java APIs for the development of software for small, resource-constrained devices such as cell phones, PDAs and set-top boxes.
The Java Runtime Environment (JRE) and Java Development Kit (JDK) are the actual files downloaded and installed on a computer to run or develop Java programs, respectively.
The majority of these packages are exported by the java.base module of the Java Platform Module System (since Java 9).
java.langThe Java packagejava.lang contains fundamental classes and interfaces closely tied to the language and runtime system. This includes the root classes that form the class hierarchy, types tied to the language definition, basic exceptions, math functions, threading, security functions, as well as some information on the underlying native system. This package contains 22 of 32 java.lang.Error classes provided in JDK 6.
The main classes and interfaces in java.lang are:
Object – the class that is the root of every class hierarchy.Enum – the base class for enumeration classes (as of J2SE 5.0).Class– Javaのリフレクティブプログラミング(リフレクション)システムの根幹となるクラス。Throwable– 例外クラス階層の基底クラスとなるクラス。Error、、ExceptionおよびRuntimeException– 各例外タイプの基本クラス。Thread– スレッド上での操作を可能にするクラス。String–文字列と文字列リテラルのクラス。StringBufferおよび、文字列操作StringBuilderを実行するためのクラス(J2SE 5.0以降)。StringBuilderComparable– オブジェクトの汎用的な比較と順序付けを可能にするインターフェース(J2SE 1.2以降)。Iterable–拡張forループを使用した汎用的な反復処理を可能にするインターフェース(J2SE 5.0以降)。ClassLoader、、、、および–クラスの動的ロード、外部プロセスの作成、時刻などのホスト環境の問い合わせ、セキュリティ ポリシーProcessの適用を管理する「システム操作」を提供するクラス。RuntimeSecurityManagerSystemMathそして、サイン、コサイン、平方根StrictMathなどの基本的な数学関数を提供するクラス(J2SE 1.3 時点)。java.lang.StrictMath内のクラスは、すべてのソースファイルjava.langに自動的にインポートされます。
java.lang.refこのパッケージは、従来よりも柔軟な参照java.lang.ref型を提供し、アプリケーションとJava仮想マシン(JVM)のガベージコレクタ間の限定的な相互作用を可能にします。言語設計者が名前空間の下に配置するほど言語の中核をなす重要なパッケージですが、やや特殊な用途向けであり、多くの開発者が使用しているわけではありません。このパッケージはJ2SE 1.2で追加されました。java.lang
Javaは表現力豊かな参照システムを備えており、ガベージコレクションのための特別な動作も可能です。Javaにおける通常の参照は「強い参照」と呼ばれます。このパッケージでは、他に「弱い参照」 「弱いjava.lang.ref参照」「ファントム参照」という3種類の参照を定義しています。それぞれの参照は特定の用途向けに設計されています。
SoftReference実装に使用できます。強い参照では到達できない(つまり、強く到達できない)が、弱い参照で参照されるオブジェクトは「弱い参照可能」と呼ばれます。弱い参照可能なオブジェクトは、ガベージコレクタの裁量でガベージコレクションされる可能性があります。これは一般的に、弱い参照可能なオブジェクトは空きメモリが少ない場合にのみガベージコレクションされることを意味しますが、これもガベージコレクタの裁量によります。意味的には、弱い参照は「メモリが必要でない限り、他の何も参照していないこのオブジェクトを保持する」ことを意味します。WeakReferenceは弱マップを実装するために使用されます。強くも弱くも到達可能ではないが、弱参照によって参照されるオブジェクトは「弱く到達可能」と呼ばれます。弱く到達可能なオブジェクトは、次のガベージコレクションサイクルでガベージコレクションされます。この動作はクラスで使用されますjava.util.WeakHashMap。弱マップを使用すると、プログラマはキー/値のペアをマップに格納し、キーが他のどこからも到達できなくなったときにオブジェクトがメモリを占有することを心配する必要がなくなります。弱参照のもう 1 つの可能なアプリケーションは、文字列インターンプールです。意味的には、弱参照は「次のガベージコレクションで他の何も参照していないときにこのオブジェクトを破棄する」ことを意味します。PhantomReference、ガベージコレクションの対象としてマークされ、ファイナライズ済みであるものの、まだ解放されていないオブジェクトを参照するために使用されます。強く、弱く、またはソフトに到達可能ではないが、ファントム参照によって参照されるオブジェクトは、「ファントム到達可能」と呼ばれます。これにより、ファイナライズ機構のみの場合よりも柔軟なクリーンアップが可能になります。意味的には、ファントム参照は「このオブジェクトはもはや必要なく、ガベージコレクションの準備としてファイナライズ済みである」ことを意味します。これらの参照型はそれぞれ、参照対象オブジェクトへの強い参照を返すメソッド(または参照がクリアされた場合、あるいは参照型がファントムの場合)と、参照をクリアするReferenceメソッドを提供するクラスを拡張しています。get()nullclear()
また、このjava.lang.refクラスはReferenceQueue、上記で説明した各アプリケーションで使用して、参照タイプが変更されたオブジェクトを追跡するために使用できます。がjava.lang.ref.Reference<T>作成されると、オプションで参照キューに登録されます。アプリケーションは参照キューをポーリングして、到達可能性状態が変更された参照を取得します。
java.lang.reflectリフレクティブプログラミング(リフレクション)は、 Java APIの構成要素であり、Java コードが実行時に Java コンポーネントを調べて「リフレクション」し、リフレクションされたメンバーを使用できるようにします。このjava.lang.reflectパッケージのクラスは、デバッガ、インタプリタ、オブジェクトインスペクタ、クラスブラウザー、オブジェクトシリアライゼーションやJavaBeansなどのサービスといったアプリケーションに対応しておりjava.lang.Class<T>、対象オブジェクトのパブリックメンバー(実行時クラスに基づく)または特定のクラスで宣言されたメンバーへのアクセスを必要とします。このパッケージは JDK 1.1 で追加されました。java.lang.Package
リフレクションは、クラスをインスタンス化したり、メソッドを名前で呼び出したりするために使用され、動的プログラミングを可能にする概念です。クラス、インターフェース、メソッド、フィールド、コンストラクタはすべて実行時に検出して使用できます。リフレクションは、JVMがプログラムに関して保持しているメタデータによってサポートされています。
内省には基本的な手法がいくつかあります。
発見は通常、オブジェクトから始まり、Object.getClass()メソッドを呼び出してオブジェクトの情報を取得しますjava.lang.Class<?>。java.lang.Class<T>オブジェクトには、クラスの内容を検出するためのメソッドがいくつかあります。たとえば、次のとおりです。
getMethods()Method–クラスまたはインターフェースのすべてのパブリックメソッドを表すオブジェクトの配列を返しますgetConstructors()Constructor–クラスのすべてのパブリックコンストラクタを表すオブジェクトの配列を返しますgetFields()Field–クラスまたはインターフェースのすべてのパブリックフィールドを表すオブジェクトの配列を返しますgetClasses()–クラスまたはインターフェースのメンバー(内部クラスjava.lang.Class<?>[]など)であるすべてのパブリッククラスおよびインターフェースを表すオブジェクトを返します。getSuperclass()–java.lang.Class<? super T>クラスまたはインターフェースのスーパークラスを表すオブジェクトを返します(nullインターフェースの場合は が返されます)。getInterfaces()–java.lang.Class<?>[]クラスまたはインターフェースによって実装されるすべてのインターフェースを表す配列を返します。オブジェクトは、クラスリテラル(例:クラスの場合)java.lang.Class<T>を使用するか、クラス名(例:)を使用するかのいずれかの方法で取得できます。オブジェクトの場合、メンバー、、またはオブジェクトは、メンバーのシンボル名を使用して取得できます。例:X.classXClass.forName("mypackage.MyClass")java.lang.Class<T>java.lang.reflect.Methodjava.lang.reflect.Constructor<T>java.lang.reflect.Field
getMethod(String name, Class<?>... parameterTypes)–パラメータで指定されたパラメータを受け入れるクラスまたはインターフェースのjava.lang.reflect.Method名前を持つパブリックメソッドを表すオブジェクトを返します。namejava.lang.Class<?>...getConstructor(Class<?>... parameterTypes)–パラメータjava.lang.reflect.Constructor<T>で指定されたパラメータを受け入れるクラスのパブリックコンストラクタを表すオブジェクトを返しますjava.lang.Class<?>...。getField(String name)–クラスjava.lang.reflect.Field名またはインターフェース名を持つパブリックフィールドを表すオブジェクトを返します。namejava.lang.reflect.Method、、java.lang.reflect.Constructor<T>およびjava.lang.reflect.Fieldオブジェクトを使用すると、クラスの表現対象メンバーに動的にアクセスできます。例:
Field.get(Object obj)–java.lang.Objectに渡されたオブジェクトのインスタンスからフィールドの値を含むを返しますget()。(java.lang.reflect.Fieldオブジェクトが静的フィールドを表す場合、java.lang.Objectパラメーターは無視され、になる可能性がありますnull。)Method.invoke(Object obj, Object... args)–に渡されたjava.lang.Object最初のjava.lang.Objectパラメータのインスタンスに対してメソッドを呼び出した結果を含むオブジェクトを返しますinvoke()。残りのjava.lang.Object...パラメータはメソッドに渡されます。(オブジェクトが静的メソッドjava.lang.reflect.Methodを表す場合、最初のパラメータは無視され、となる場合があります。)java.lang.ObjectnullConstructor.newInstance(Object... initargs)java.lang.Object–コンストラクタの呼び出しによって新しいインスタンスを返します。java.lang.Object...パラメータはコンストラクタに渡されます。(クラスのパラメータなしコンストラクタも呼び出すことができますnewInstance()。)このjava.lang.reflectパッケージには、Array配列オブジェクトの作成と操作のための静的メソッドを含むクラスも含まれており、J2SE 1.3以降では、Proxy指定されたインターフェースを実装するプロキシクラスの動的な作成をサポートするクラスも提供されています。
クラスの実装は、インターフェースjava.lang.reflect.Proxyを実装する提供オブジェクトによって提供されますInvocationHandler。プロキシオブジェクトで呼び出される各メソッドに対して、 のメソッドが呼び出されます。最初のパラメータはプロキシオブジェクト、2番目のパラメータはjava.lang.reflect.InvocationHandlerプロキシによって実装されるインターフェースのメソッドを表すオブジェクト、3番目のパラメータはインターフェースメソッドに渡されるパラメータの配列です。このメソッドは、プロキシインターフェースメソッドを呼び出したコードに返された結果を含む結果を返します。invoke(Object proxy, Method method, Object[] args)java.lang.reflect.Methodinvoke()java.lang.Object
java.ioこのパッケージには、入力と出力をjava.ioサポートするクラスが含まれています。パッケージ内のクラスは主にストリーム指向ですが、ランダムアクセスファイル用のクラスも提供されています。パッケージの中心となるクラスはと で、それぞれバイトストリームからの読み取りとバイトストリームへの書き込みのための抽象基底クラスです。関連するクラスと は、それぞれ文字ストリームからの読み取りと文字ストリームへの書き込みのための抽象基底クラスです。このパッケージには、ホストファイルシステムとのやり取りをサポートするためのその他のクラスもいくつか含まれています。InputStreamOutputStreamReaderWriter
ストリームクラスは、基本サブクラスを拡張してストリームクラスに機能を追加することで、デコレータパターンに従います。基本ストリームクラスのサブクラスは、通常、次のいずれかの属性に基づいて命名されます。
ストリームのサブクラスは、 という命名パターンXxxStreamTypeを使用して命名されます。ここでXxx、 は機能を説明する名前であり、は、 、、 のStreamTypeいずれかです。java.io.InputStreamjava.io.OutputStreamjava.io.Readerjava.io.Writer
以下の表は、このjava.ioパッケージが直接サポートする送信元/送信先を示しています。
他の標準ライブラリパッケージは、メソッドjava.io.InputStreamによって返されるストリームjava.net.Socket.getInputStream()やJava EEjavax.servlet.ServletOutputStreamクラスなど、他の宛先に対するストリームの実装を提供します。
ストリームデータのデータ型処理やフィルタリングは、ストリームフィルタによって行われます。フィルタクラスはすべて、コンストラクタのパラメータとして互換性のある別のストリームオブジェクトを受け取り、囲まれたストリームに追加機能を追加します。フィルタは、基本フィルタクラスFilterInputStream、、、、のいずれかを拡張して作成されます。FilterOutputStreamFilterReaderFilterWriter
とクラスはjava.io.Reader、java.io.Writer実際にはバイトストリームであり、データストリームに対して追加の処理を実行してバイトを文字に変換します。これらはプラットフォームのデフォルトの文字エンコーディングCharsetを使用します。J2SE 5.0 以降では、これは静的メソッドによって返されるで表されますjava.nio.charset.Charset.defaultCharset()。クラスはをにInputStreamReader変換し、クラスはをに変換します。これらのクラスには、使用する文字エンコーディングを指定するコンストラクタがあります。エンコーディングが指定されていない場合、プログラムはプラットフォームのデフォルトのエンコーディングを使用します。InputStreamjava.io.ReaderOutputStreamWriterjava.io.OutputStreamjava.io.Writer
以下の表は、このパッケージが直接サポートするその他のプロセスとフィルターを示していますjava.io。これらのクラスはすべて、対応するjava.io.FilterInputStreamクラスを継承しています。
このRandomAccessFileクラスは、ファイルのランダムアクセス読み書きをサポートします。このクラスは、次の読み書き操作のためのファイル内のバイトオフセットを表すファイルポインタseek(long)を使用します。ファイルポインタは、読み書きによって暗黙的に移動され、またはメソッドを呼び出すことによって明示的に移動されますskipBytes(int)。ファイルポインタの現在の位置は、メソッドによって返されますgetFilePointer()。
このFileクラスは、ファイルシステム内のファイルまたはディレクトリのパスを表します。オブジェクトは、ファイルやディレクトリの作成、削除、名前変更、および読み取り専用や最終更新日時などのファイル属性の操作をサポートします。ディレクトリを表すオブジェクトを使用すると、ディレクトリに含まれるすべてのファイルとディレクトリのリストを取得できます。java.io.Filejava.io.File
このFileDescriptorクラスは、バイトの送信元または送信先(宛先)を表すファイルディスクリプタです。通常はファイルですが、コンソールやネットワークソケットの場合もあります。 java.io.FileDescriptorオブジェクトはストリームを作成するために使用されます。これらは、ストリーム、ソケット、およびデータグラムソケットjava.io.Fileから取得されます。java.io.Filejava.net
java.nioJ2SE 1.4 では、メモリマップド I/O をサポートするためにパッケージjava.nio(NIO またはノンブロッキング I/O) が追加され、基盤となるハードウェアに近い場所でI/O操作を実行できるようになり、場合によってはパフォーマンスが劇的に向上します。このパッケージは、さまざまなバッファタイプをサポートします。サブパッケージは、文字データ用のさまざまな文字エンコーディングをサポートします。サブパッケージは、ファイルやソケットなど、I/O 操作を実行できるエンティティへの接続を表すチャネルをサポートします。このパッケージは、ファイルのきめ細かいロックもサポートします。java.niojava.nio.charsetjava.nio.channelsjava.nio.channels
このjava.mathパッケージは、多倍長演算(モジュラ演算を含む)をサポートし、暗号鍵生成に使用される多倍長素数生成器を提供します。このパッケージの主なクラスは以下のとおりです。
java.netこのjava.netパッケージは、ネットワーク向けの特別な入出力ルーチンを提供し、HTTPリクエストやその他の一般的なトランザクションを可能にします。
java.textこのjava.textパッケージは文字列の解析ルーチンを実装しており、様々な人間が読める言語と地域固有の解析をサポートしています。
java.utilこのパッケージは、オブジェクトを集約するデータ構造に焦点を当てていますjava.util。パッケージには、デザインパターンの考慮事項に大きく影響を受けた、整理されたデータ構造階層であるCollections APIが含まれています。
java.appletJavaアプレットの作成をサポートするために作成されたこのjava.appletパッケージを使用すると、アプリケーションをネットワーク経由でダウンロードし、保護されたサンドボックス内で実行できます。サンドボックスには簡単にセキュリティ制限を適用できます。たとえば、開発者はアプレットにデジタル署名を適用して、安全なものとしてラベル付けできます。これにより、ユーザーはアプレットに制限された操作(ローカルハードドライブへのアクセスなど)を実行する権限を付与でき、サンドボックスの制限の一部またはすべてを解除できます。デジタル証明書は認証局によって発行されます。
Javaアプレットは現在非推奨となっているため、このパッケージ自体も非推奨となります。
java.beansこのパッケージには、 JavaBeansアーキテクチャjava.beansで定義された再利用可能なコンポーネントであるBeanの開発と操作のための様々なクラスが含まれています。このアーキテクチャは、コンポーネントのプロパティを操作し、それらのプロパティが変更されたときにイベントを発生させるメカニズムを提供します。
これらのAPIはjava.beans、ビーンを組み合わせたり、カスタマイズしたり、操作したりできるビーン編集ツールで使用することを想定しています。ビーンエディタの一種として、統合開発環境におけるGUIデザイナーが挙げられます。
java.awt、またはAbstract Window Toolkit は、基盤となるネイティブ プラットフォームのウィジェット セットに基づいたjava.awt基本的なGUIウィジェット セット、GUI イベント サブシステムのコア、およびネイティブ ウィンドウ システムと Java アプリケーション間のインターフェイスへのアクセスを提供します。また、いくつかの基本的なレイアウト マネージャ、クリップ ボードとドラッグ アンド ドロップで使用するためのデータ転送パッケージ、マウスやキーボードなどの入力デバイスへのインターフェイス、およびサポート システムでのシステム トレイへのアクセスも提供します。このパッケージは、とともに、JDK 6 で最も多くの列挙型 (合計 7 つ) を含んでいます。javax.swing
java.rmiこのjava.rmiパッケージは、異なるJVMで実行されている2つのJavaアプリケーション間でのリモートプロシージャ呼び出しをサポートするJavaリモートメソッド呼び出し機能を提供します。
java.securityメッセージダイジェストアルゴリズムを含むセキュリティサポートは、java.securityパッケージに含まれています。
java.sqlこのパッケージには、 JDBC API(SQLデータベースにアクセスするために使用される)の実装が含まれていますjava.sql。
javax.rmiこのjavax.rmiパッケージは、RMI over IIOPプロトコルを使用して、アプリケーション間のリモート通信をサポートします。このプロトコルは、RMIとCORBAの機能を組み合わせたものです。
Java SEコアテクノロジー - CORBA / RMI-IIOP
javax.swingSwing はjava.awt、プラットフォームに依存しないウィジェット ツールキットを提供するように構築されたルーチンの集合です。基盤となるネイティブオペレーティングシステムのjavax.swingGUI サポートに依存するのではなく、2D 描画ルーチンを使用してユーザー インターフェイス コンポーネントをレンダリングします。
このパッケージには、JDK 6 で最多のクラス数 (合計 133 個) が含まれています。また、このパッケージには、java.awtJDK 6 で最多の列挙型数 (合計 7 個) も含まれています。プラグイン可能なルックアンドフィール (PLAF) をサポートしているため、GUI のウィジェットは基盤となるネイティブ システムのウィジェットを模倣できます。デザイン パターンがシステム全体に浸透しており、特にモデル ビュー コントローラパターンの修正版が採用されているため、機能と外観の結合が緩やかになっています。 1 つの不整合として、(J2SE 1.3 の時点で) フォントは Java ではなく基盤となるネイティブ システムによって描画されるため、テキストの移植性が制限されます。ビットマップ フォントの使用などの回避策は存在します。一般的に、「レイアウト」が使用され、プラットフォーム間で美的に一貫した GUI 内の要素が維持されます。
javax.swing.text.html.parserこのjavax.swing.text.html.parserパッケージは、様々なウェブブラウザやウェブボットを作成する際に使用される、エラー耐性のあるHTMLパーサーを提供します。
javax.xml.bind.annotationThe javax.xml.bind.annotation package contained the largest number of Annotation Types (30 in all) in JDK 6. It defines annotations for customizing Java program elements to XML Schema mapping.
org.w3cJava contains packages for World Wide Web Consortium utilities (primarily XML) under namespace org.w3c. Many of these exist in the java.xml module.
org.w3c.domThe org.w3c.dom packages provide interfaces for the Document Object Model (DOM).
org.xml.saxThe org.xml.sax packages provide interfaces for the Simple API for XML (SAX).
org.omgorg.omg.CORBAThe org.omg.CORBA package provided support for the remote communication between applications using the General Inter-ORB Protocol and supports other features of the common object request broker architecture. Same as RMI and RMI-IIOP, this package is for calling remote methods of objects on other virtual machines (usually via network).
This package contained the largest number of java.lang.Exception classes (45 in all) in JDK 6. From all communication possibilities CORBA is portable between various languages; however, with this comes more complexity.
These packages were deprecated in Java 9 and removed from Java 11.[8]
org.omg.PortableInterceptorThe org.omg.PortableInterceptor package contained the largest number of interfaces (39 in all) in JDK 6. It provides a mechanism to register ORB hooks through which ORB services intercept the normal flow of execution of the ORB.
Several critical security vulnerabilities have been reported.[9][10] Security alerts from Oracle announce critical security-related patches to Java SE.[11]