7

クラス クラス オブジェクトは、次の 3 つの方法で取得できます。

  • MyClass.class
  • obj.getClass
  • Class.forName("クラス名")

MyClass.classとの違いがわかりませんClass.forName("className")

どちらもクラス名が必要になるためです。

4

4 に答える 4

11
Class.forName("className"); 

forNameは、クラス「Class」の静的メソッドです。目的のクラスの完全修飾名を指定する必要があります。これは、実行時にクラスの名前がわかるようになるときに使用できます。

ClassName.class;

.classはメソッドではなく、キーワードであり、intのようなプリミティブ型で使用できます。クラスの名前が事前にわかっていて、それがプロジェクトに追加された場合、そのときはClassName.classを使用します

于 2012-06-18T04:49:34.267 に答える
8

MyClass.classとの違いがわかりませんClass.forName("className")

どちらもクラス名が必要になるためです。

大きな違いは、いつ必要になるかです。stringClass.forNameを受け入れるため、実行時にクラス名を決定できます。もちろん、コンパイル時に決定されます。これは、構成に基づいてクラスを動的にロードする場合に役立ちます (たとえば、構成ファイルの設定に応じてデータベース ドライバをロードするなど)。MyClass.classClass.forName

Rounding out:obj.getClass()は、オブジェクトの実際のクラスがわからない可能性があるため便利ですfoo(Map m)。のクラスはわかりませんが、mそれは を実装するものですMap。(そして 99% の場合、そのクラスが何であるかを気にする必要はありませんが、その 1% が時折発生します。)

于 2012-06-18T04:53:25.500 に答える
2

重要な違いの 1 つは、A.class がクラス A のロードとリンクを実行することです。Class.forName("A") がクラス A のロード、リンク、および初期化を実行します。

于 2014-08-28T06:31:58.287 に答える
1
Class.forName("className"); 

完全修飾クラス名文字列に基づいてクラスを動的にロードします。

obj.getClass

オブジェクトのランタイム クラスを表す java.lang.Class オブジェクトを返します。

MyClass.class:

リテラルは、クラス、インターフェイス、配列、またはプリミティブ型のclass名前、または疑似型 void の後にa「.」が続く式です。そしてトークンクラス。の型 ( C.classC はクラス、インターフェイス、または配列型の名前) は ですClass<C>

http://docs.oracle.com/javase/specs/jls/se7/jls7.pdf

于 2012-06-18T05:35:37.913 に答える