185 votes

Que signifie .class en Java ?

Qu'est-ce que .class signifie-t-il en Java ? Par exemple, si je crée une classe appelée Print . Que fait Print.class retour ?

179voto

Javier Points 5039

Quand vous écrivez .class après un nom de classe, il fait référence au littéral de la classe - java.lang.Class objet qui représente des informations à propos de classe donnée.

Par exemple, si votre classe est Print entonces 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 fonction getClass() de toute instance (directe) de Print .

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

67voto

christopher Points 15114

.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 un résultat :

class java.lang.String

C'est la classe de l'objet chaîne :)

13voto

Salvador Valencia Points 229

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

Cette méthode '.class' est utilisée en Java pour le code Reflection. En général, vous pouvez rassembler les méta-données de votre classe telles que le nom complet de la classe, 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 savez que vous avez besoin après avoir essayé de gérer un code déjà fonctionnel. Souvent, vous en avez besoin pour gérer plusieurs instances de votre programme. Peut-être voulez-vous identifier chaque " clone " particulier pour déterminer si quelque chose est déjà défini, ou compter le nombre de fonctions, ou simplement enregistrer les détails d'une instance particulière de votre classe.

6voto

Andrew Points 529

Si une instance d'un objet est disponible, la manière la plus simple d'obtenir sa Classe est d'invoquer Object.getClass()

Le site .class Syntaxe

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 d'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

3voto

Ranjeet Points 106

S'il n'y a pas d'instance disponible, alors .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. Puisqu'il n'existe pas d'instance du type de données primitif, nous devons utiliser la méthode .class syntaxe 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());
       }
    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X