モジュール java.base
パッケージ java.lang

クラスClass<T>

java.lang.Object
java.lang.Class<T>
型パラメータ:
T - このClassオブジェクトでモデル化されるクラスの型。 たとえば、String.classの型は Class<String>である。 モデル化するクラスが不明な場合はClass<?>を使用する。
すべての実装されたインタフェース:
Serializable, Constable, TypeDescriptor, TypeDescriptor.OfField<Class<?>>, AnnotatedElement, GenericDeclaration, Type

public final class Class<T> extends Object implements Serializable, GenericDeclaration, Type, AnnotatedElement, TypeDescriptor.OfField<Class<?>>, Constable
Classクラスのインスタンスは、実行中のJavaアプリケーションのクラスおよびインタフェースを表します。 enumクラスとrecordクラスはクラスの一種で、annotationインタフェースはインタフェースの一種です。 同様にどの配列も、同じ要素のタイプおよび次元数を持つすべての配列により共有されるClassオブジェクトとしてリフレクトされるクラスに属します。 プリミティブJava型(booleanbytecharshort intlongfloat、およびdouble)やキーワードvoidも、Classオブジェクトとして表されます。

Classには、publicコンストラクタはありません。 かわりに、Classオブジェクトは、次のいずれかのメソッドの呼出しによってclassファイルのバイトからクラスが導出されると、Java Virtual Machineによって自動的に構築されます:

クラスClassのメソッドでは、クラスまたはインタフェースの多くの特性が公開されます。 ほとんどの特性は、クラス・ローダーがJava Virtual Machineに渡したclassファイル、またはLookup::defineClassまたはLookup::defineHiddenClassに渡されたclassファイルから導出されます。 いくつかの特性は、getModule()によって返されたモジュールなど、実行時のクラス・ロード環境によって決まります。

以下の例では、Classオブジェクトを使ってオブジェクトのクラス名を出力します。

void printClassName(Object obj) {
    System.out.println("The class of " + obj +
                       " is " + obj.getClass().getName());
}
「クラス・リテラル」を使用して、名前付きクラスまたはインタフェース(またはvoidの場合)のClassオブジェクトを取得することもできます。 たとえば、
System.out.println("The name of class Foo is: "+Foo.class.getName());

クラスClassの一部のメソッドでは、Javaソース・コードのクラスまたはインタフェースの宣言が別の宣言で「囲み」だったかどうかが公開されます。 他のメソッドは、クラスまたはインタフェースが「ネスト」にある状況を表します。 「ネスト」は、同じランタイム・パッケージ内のクラスとインタフェースのセットで、privateメンバーへの相互のアクセスを可能にします。 クラスおよびインタフェースは、nestmatesと呼ばれます。 1つのネストしたウィンドウは「ホストのネスト」の役割を果たし、他のネストしたコンテンツを列挙します。ネストしたホストとして各ネストします。 ネストしたクラス(ホストを含む)に属するクラスとインタフェースは、classファイルが生成されたときに判別されます。たとえば、Javaコンパイラでは通常、最上位クラスがネストのホストとして記録されます。ここでは、宣言が最上位クラス宣言で囲まれたクラスとインタフェースが他のメンバーになります。

Hiddenクラス

Lookup::defineHiddenClassの起動によって作成されるクラスまたはインタフェースは、hiddenクラスまたはインタフェースです。 enumクラスやrecordクラスを含むすべての種類のクラスは非表示クラスである可能性があります。注釈インタフェースを含むすべての種類のインタフェースは非表示インタフェースである可能性があります。 「非表示のクラスまたはインタフェースの名前」「バイナリ名」ではありません。つまり、次のようになります: 非表示のクラスまたはインタフェースは配列クラスではありませんが、配列の要素タイプである可能性があります。 他のすべての点では、クラスまたはインタフェースが非表示になっているという事実は、Classクラスのメソッドによって公開される特性には関係ありません。

暗黙的に宣言されたクラス

従来、暗黙的に宣言されたクラスのソース・ファイル(HelloWorld.javaなど)から始まるJavaコンパイラは、同じ名前のclassファイル(HelloWorld.class)を作成します。ここで、そのclassファイルに格納されているクラスは、ソース・ファイルと classファイルのベース名と一致する "HelloWorld"という名前です。 暗黙的に宣言されたクラス HelloWorldClassオブジェクトの場合、nameおよび「タイプ名」を取得するメソッドは、"HelloWorld"と等しい結果を返します。 このような暗黙的に宣言されたクラスの「単純名」"HelloWorld"で、「正規名」"HelloWorld"です。
Java言語仕様を参照してください:
15.8.2 クラス・リテラル
導入されたバージョン:
1.0
関連項目: