.class
Javaで何を意味しますか?たとえば、というクラスを作成したとしPrint
ます。何がPrint.class
戻りますか?
.class
のみ関連する構文について尋ねています.class
。
.class
Javaで何を意味しますか?たとえば、というクラスを作成したとしPrint
ます。何がPrint.class
戻りますか?
.class
のみ関連する構文について尋ねています.class
。
回答:
あなたが書くとき.class
-クラス名の後に、それはクラスリテラルを参照する
java.lang.Class
情報を表すオブジェクトについての特定のクラスを。
たとえば、クラスがのPrint
場合、Print.class
はPrint
実行時のクラスを表すオブジェクトです。これは、のgetClass()
(直接の)インスタンスのメソッドによって返されるオブジェクトと同じですPrint
。
Print myPrint = new Print();
System.out.println(Print.class.getName());
System.out.println(myPrint.getClass().getName());
Writer.class.getDeclaredField("writeBuffer")
。例:
Print.class
何ですか?
new Intent(this, Activity.class
ますか?class Activity
各クラスを比較して見つけようとしますか?
.class
使用可能なクラスのインスタンスがない場合に使用されます。
.getClass()
使用可能なクラスのインスタンスがある場合に使用されます。
object.getClass()
指定されたオブジェクトのクラスを返します。
例えば:
String string = "hello";
System.out.println(string.getClass().toString());
これは出力します:
class java.lang.String
これは文字列オブジェクトのクラスです:)
getClass()
クラスのオブジェクトを指す参照がある場合にのみ役立ちます。ClassName.class
クラスにインスタンスがない場合でも使用できます。たとえば、を検討してくださいMath.class
。それぞれが特定の状況に適しています。
.class
と.getClass().
オブジェクトのインスタンスが利用可能な場合、そのクラスを取得する最も簡単な方法は、 Object.getClass()
.class
構文
タイプが利用可能であるがインスタンスがない場合.class
、タイプの名前に追加することによりクラスを取得することが可能です。これは、プリミティブ型のクラスを取得する最も簡単な方法でもあります。
boolean b;
Class c = b.getClass(); // compile-time error
Class c = boolean.class; // correct
明確にするために、この「.class」メソッドは、Javaコードをコンパイルした後に表示されるバイトコードファイルを参照しておらず、OOP理論におけるクラスとオブジェクトの概念の混同も示していません。
この「.class」メソッドは、コードリフレクションのためにJavaで使用されます。通常、完全修飾クラス名、定数のリスト、パブリックフィールドのリストなど、クラスのメタデータを収集できます。
これらのリンク(前述)をチェックして、すべての詳細を取得し
ます。https://docs.oracle.com/javase/tutorial/reflect/class/classNew.html
https://docs.oracle.com/javase/8/docs /api/java/lang/Class.html
通常、プロジェクトの構築を開始するときに、すぐにReflectionを使用する予定はありません。これは、すでに機能しているコードを管理しようとした後で必要になることです。多くの場合、プログラムの複数のインスタンスを管理するためにそれが必要です。おそらく、何か特定の「クローン」を識別して、何かがすでに定義されているかどうかを判断したり、関数の数をカウントしたり、単にクラスの特定のインスタンスの詳細をログに記録したりすることができます。
使用可能なインスタンスがない場合は、.class
構文を使用してクラスに対応するClassオブジェクトを取得します。それ以外の場合は、getClass()メソッドを使用してClassオブジェクトを取得できます。プリミティブデータ型のインスタンスはないため、プリミティブデータ型の.class
構文を使用する必要があります。
package test;
public class Test {
public static void main(String[] args)
{
//there is no instance available for class Test, so use Test.class
System.out.println("Test.class.getName() ::: " + Test.class.getName());
// Now create an instance of class Test use getClass()
Test testObj = new Test();
System.out.println("testObj.getClass().getName() ::: " + testObj.getClass().getName());
//For primitive type
System.out.println("boolean.class.getName() ::: " + boolean.class.getName());
System.out.println("int.class.getName() ::: " + int.class.getName());
System.out.println("char.class.getName() ::: " + char.class.getName());
System.out.println("long.class.getName() ::: " + long.class.getName());
}
}
ここでの鍵は、クラスとオブジェクトの違いを理解することだと思います。オブジェクトはクラスのインスタンスです。しかし、完全にオブジェクト指向の言語では、クラスはオブジェクトでもあります。したがって、呼び出し.class
はそのClassのClassオブジェクトへの参照を取得し、それを操作できます。
in a fully object-oriented language, a Class is also an Object
?<引用が必要>
クラスリテラルは、クラス、インターフェイス、配列、プリミティブ型の名前、または擬似型voidの後に「。」が付いた式です。とトークンクラス。JDK 5.0の変更点の1つは、クラスjava.lang.Classがジェネリックでjava.lang.Class Class<T>
あるため、次のとおりです。
Class<Print> p = Print.class;
ここでの参照:
https://docs.oracle.com/javase/7/docs/api/java/lang/Class.html
http://docs.oracle.com/javase/tutorial/extra/generics/literals.html
http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.8.2