web-dev-qa-db-ja.com

Javaでの.classの意味は?

Javaで.classはどういう意味ですか?たとえば、Printというクラスを作成した場合。 Print.classは何を返しますか?

133
Quinn Wei

クラス名の後に.classを記述すると、クラスリテラル- Java.lang.Class 情報を表すオブジェクトaboutを参照します。

たとえば、クラスがPrintの場合、Print.classは実行時にクラスPrintを表すオブジェクトです。これは、Printの(直接)インスタンスのgetClass()メソッドによって返されるものと同じオブジェクトです。

Print myPrint = new Print();
System.out.println(Print.class.getName());
System.out.println(myPrint.getClass().getName());
130
Javier

.classは、使用可能なクラスのインスタンスがない場合に使用されます。
。getClass()は、使用可能なクラスのインスタンスがある場合に使用されます。

object.getClass()は、指定されたオブジェクトのクラスを返します。例えば:

String string = "hello";
System.out.println(string.getClass().toString());

これは出力されます

class Java.lang.String

これは文字列オブジェクトのクラスです:)

48
christopher

オブジェクトのインスタンスが利用できる場合、そのクラスを取得する最も簡単な方法はObject.getClass()を呼び出すことです

.class構文

タイプは利用できるがインスタンスが存在しない場合は、タイプの名前に.classを追加することでクラスを取得できます。これは、プリミティブ型のクラスを取得する最も簡単な方法でもあります。

boolean b;
Class c = b.getClass();   // compile-time error

Class c = boolean.class;  // correct

参照: クラスについてはdocs.Oracle.com

5
Andrew Xie

明確にするために、この「.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を使用する予定はありません。すでに動作しているコードを管理しようとした後に必要なことがわかっているものです。多くの場合、プログラムの複数のインスタンスを管理するために必要です。特定の「クローン」をそれぞれ特定して、何かが既に定義されているかどうかを確認したり、関数の数をカウントしたり、単にクラスの特定のインスタンスの詳細を記録したりすることができます。

5

使用可能なインスタンスがない場合は、.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());
       }
    }
2
Ranjeet

ここでの鍵は、クラスとオブジェクトの違いを理解することだと思います。オブジェクトはクラスのインスタンスです。しかし、完全なオブジェクト指向言語では、クラスもオブジェクトです。そのため、.classを呼び出すと、そのクラスのClassオブジェクトへの参照が取得され、その後操作できます。

1
Xerxes

クラスリテラルは、クラス、インターフェイス、配列、またはプリミティブ型の名前、または擬似型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

0
PbxMan