web-dev-qa-db-fra.com

Que signifie .class en Java?

Que signifie .class en Java? Par exemple, si j'ai créé une classe appelée Print. Que retourne Print.class?

136
Quinn Wei

Lorsque vous écrivez _.class_ après un nom de classe, il fait référence au littéral de classe - Java.lang.Class objet représentant des informations sur classe donnée.

Par exemple, si votre classe est Print, alors _Print.class_ est un objet qui représente la classe Print au moment de l'exécution. C'est le même objet qui est renvoyé par la méthode getClass() de toute instance (directe) de Print.

_Print myPrint = new Print();
System.out.println(Print.class.getName());
System.out.println(myPrint.getClass().getName());
_
131
Javier

.class est utilisé lorsqu'il n'y a pas d'instance de la classe disponible.
. getClass () est utilisé lorsqu'une instance de la classe est disponible.

object.getClass () renvoie la classe de l'objet donné. Par exemple:

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

Cela produira

class Java.lang.String

C'est la classe de l'objet string :)

48
christopher

Si une instance d'un objet est disponible, le moyen le plus simple d'obtenir sa classe consiste à appeler Object.getClass()

La syntaxe .class

Si le type est disponible mais qu'il n'y a pas d'instance, il est possible d'obtenir une classe en ajoutant .class au nom du type. C'est également le moyen le plus simple d'obtenir la classe pour un type primitif.

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

Class c = boolean.class;  // correct

Voir: docs.Oracle.com à propos de la classe

5
Andrew Xie

Juste pour clarifier, cette méthode '.class' ne fait pas référence au fichier de bytecode que vous voyez après la compilation du code Java, ni à une confusion entre les concepts de classe et d'objet dans la théorie OOP.

Cette méthode '.class' est utilisée dans Java pour le code Reflection. En règle générale, vous pouvez collecter des métadonnées pour votre classe, telles que le nom complet de la classe qualifiée, la liste des constantes, la liste des champs publics, etc., etc.

Consultez ces liens (déjà mentionnés ci-dessus) pour obtenir tous les détails:
https://docs.Oracle.com/javase/tutorial/reflect/class/classNew.html
https://docs.Oracle.com/javase/8/docs/api/Java/lang/Class.html

Normalement, vous ne prévoyez pas d’utiliser Reflection immédiatement lorsque vous commencez à construire votre projet. C'est quelque chose dont vous avez besoin après avoir essayé de gérer du code qui fonctionne déjà. Plusieurs fois, vous en avez besoin pour gérer plusieurs instances de votre programme. Peut-être voudrez-vous identifier chaque "clone" particulier pour déterminer si quelque chose est déjà défini, compter le nombre de fonctions ou simplement consigner les détails d'une instance particulière de votre classe.

5
Salvador Valencia

S'il n'y a pas d'instance disponible, la syntaxe .class est utilisée pour obtenir l'objet Class correspondant à une classe. Sinon, vous pouvez utiliser la méthode getClass () pour obtenir l'objet Class. Comme il n'y a pas d'instance de type de données primitif, nous devons utiliser la syntaxe .class pour les types de données primitifs.

    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

Je pense que la clé ici est de comprendre la différence entre une classe et un objet. Un objet est une instance d'une classe. Mais dans un langage entièrement orienté objet, un Class est aussi un objet. Ainsi, l'appel de .class obtient la référence à l'objet Class de cette classe, qui peut ensuite être manipulé.

1
Xerxes

Un littéral de classe est une expression constituée du nom d'une classe, d'une interface, d'un tableau ou d'un type primitif, ou du pseudo-type void, suivi d'un '.' et la classe de jeton. L'un des changements dans JDK 5.0 est que la classe Java.lang.Class est générique, Java.lang.Class Class<T>, par conséquent:

Class<Print> p = Print.class;

Références ici:

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