Javaプログラムが実行されているとき、Javaシステムは常に、すべてのオブジェクトのSo -Calcaled Runtime Type Identificationを実行してきました。この情報は、各オブジェクトのクラスを記録します。仮想マシンは通常、これらのタイプの情報を保存するために使用されるタイプ情報を実行する正しい方法を使用します。クラスクラスは、ロードクラスがロードされると、オブジェクトとインターフェイスの状態をカプセル化します。
簡単な要約は次のとおりです。
クラスクラスもクラスですが、名前はクラスのキーワードの名前に似ています。 Javaは繊細な言語です。
クラスクラスのコンテンツは、たとえば作成したクラスのタイプ情報です。
クラスクラスのオブジェクトは、通常のクラスのように新しいshapes()で作成することはできません。
クラスクラスの役割は、ランタイム中に特定のオブジェクトを提供または取得するタイプ情報を提供または取得することです。これは、C ++のTypeID()関数に似ています。この情報は、反射にも使用できます。
1.クラスクラスの原則
すべてのJavaクラスがオブジェクトクラスに継承されていることを知っていますクラスクラス。クラスオブジェクト(コンストラクターはプライベート)を生成することはできません。このクラスクラスのオブジェクトは、転送されたときにJava仮想マシンによってクラスオブジェクトを自動的に作成するか、ローダー内のDefineClassメソッドによって生成されることです。生成するオブジェクトには、オブジェクトのクラスクラスにオブジェクトのオブジェクトの位置を記録するフィールドがあります。下の図に示すように:
2。クラスクラスオブジェクトを取得します
最初の方法は、クラスクラスのforName関数です
[コーデッククラスの形状{}
クラスobj = class.forname( "shapes");
2番目の方法は、オブジェクトのオブジェクトのオブジェクトを使用することです
コードコードを次のようにコピーします:クラスシェイプ{}
shapes s1 = new shapes();
クラスobj = s1.getclass();
クラスobj1 = s1.getsuperclass();
3番目の方法は、タイプのタイプ定数を使用することです
コードコードを次のようにコピーします:obj = string.class;
クラスobj1 = int.class;
この方法を使用してクラスクラスオブジェクトを生成する場合、JVMはクラス(文字列など)を自動的にロードしないことに注意してください。他の方法では、JVMがこのクラスを初期化させます。
3.クラスクラスのオブジェクトを使用して、ターゲットクラスのインスタンスを生成します
不正確なオブジェクトインスタンス
クラスクラスのオブジェクトを取得した後、newInstance()関数を使用して、ターゲットクラスのインスタンスを生成できます。ただし、この関数はターゲットクラスのインスタンスを直接生成するわけではなく、オブジェクトクラスのインスタンスのみを生成できます
コードコードを次のようにコピーします:obj = class.forname( "shapes");
Object ShapeSinstance = obj.newinstance();
一般化クラスを使用して、タイプベルトタイプのターゲットインスタンスを参照してください
コードコードを次のようにコピーします:shapes> obj = shapes.class;
shapes newshape = obj.newinstance();
タイプの制限のため、一般化クラスの構文へのオブジェクト参照は、他のカテゴリに向けることはできません。
コードコードを次のようにコピーします。クラスobj1 = int.class;
class <integer> obj2 = int.class;
obj1 = double.class;
//obj2=double.class;この行コードは違法です。
ただし、クラスのオブジェクトを使用して、ベースクラスのサブクラスを指すことができる柔軟な使用法があります。
コードコードを次のようにコピーします。クラス<?obj = int.class;
obj = number.class;
obj = double.class;
したがって、以下に生成されたクラスオブジェクトは、任意のクラスを指すことができます。
コードコードを次のようにコピーします。クラス<?> obj = int.class;
obj = double.class;
obj = shapes.class;
最後の奇妙な使用法は、この一般的な構文を使用して、手元にあるクラスクラスのオブジェクトのベースクラスオブジェクトを構築する場合、次の特別な文法を使用する必要があることです。
コードコードを次のようにコピーします:パブリッククラスシェイプ{}
クラスラウンドはshapes {}を拡張します
class <rand> rclass = round.class;
class <?
// class <shapes> sclass = rclass.getsuperclass();
ラウンドのベースクラスは形状であることはわかっていますが、クラス<shapes>を直接宣言することはできず、特別な文法を使用する必要があります
クラス<?
上記は、この記事のすべての内容です。