この記事では、主にJava言語のクラスの分類と一般化を紹介します(詳細な説明)。Javaプログラムは、操作中、つまりRTTIのすべてのオブジェクトを実行することを知っています。この情報は、各オブジェクトのクラスを記録します。仮想マシンは通常、これらのタイプの情報を保存するために使用されるタイプ情報を実行する正しい方法を使用します。クラスクラスは状態をカプセル化し、インターフェイスの状態が実行されている場合、クラスタイプのオブジェクトは自動的に作成されます。
明白に言う:
クラスクラスもクラスですが、名前はクラスのキーワードの名前に似ています。 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();
一般化クラスを使用して、タイプベルトタイプのターゲットインスタンスを参照してください
次のようにコードコードをコピーします。
class <shapes> obj = shapes.class;
shapes newshape = obj.newinstance();
タイプの制限のため、一般化クラスの構文へのオブジェクト参照は、他のカテゴリに向けることはできません。
次のようにコードコードをコピーします。
クラスobj1 = int.class;
class <integer> obj2 = int.class;
obj1 = double.class;
//obj2=double.class;
このコードは違法ですが、他のクラスに変更できません。
次のようにコードコードをコピーします。
クラス<?
obj = number.class;
obj = double.class;
したがって、以下に生成されたクラスオブジェクトは、任意のクラスを指すことができます。
次のようにコードコードをコピーします。
class <?> obj = int.class;
obj = double.class;
obj = shapes.class;
最後の奇妙な使用法は、この一般的な構文を使用して、手元にあるクラスクラスのオブジェクトのベースクラスオブジェクトを構築する場合、次の特別な文法を使用する必要があることです。
次のようにコードコードをコピーします。
パブリッククラスの形状{}
クラスラウンドはshapes {}を拡張します
class <rand> rclass = round.class;
class <?
// class <shapes> sclass = rclass.getsuperclass();
ここでは、ラウンドのベースクラスはシェイプであることを知っている必要がありますが、クラス<shapes>を宣言することはできません
上記のコンテンツの導入は、Java Languageクラス分類方法と一般化のコンテンツ全体です(詳細な説明)。