91 votes

Qu'est-ce qu'un objet de classe (java.lang.class) en java?

La documentation JAVA indique "Les objets de classe sont construits automatiquement par la machine virtuelle Java au fur et à mesure du chargement des classes et par des appels à la méthode defineClass dans le chargeur de classes."

Quels sont ces objets de classe? Sont-ils identiques aux objets instanciés à partir d'une classe en appelant new?

Aussi, par exemple Object.getClass().getName() comment tout peut être transtypé en classe de classe supérieure, même si je n’hérite pas de java.lang.Class ?

104voto

Bozho Points 273663

Rien n'est à typecasted Class. Chaque Object en Java appartient à un certain class. C'est pourquoi l' Object classe, qui est héritée par toutes les autres classes, définit l' getClass() méthode.

getClass(), ou de la classe-littéral - Foo.class retourner un Class objet, qui contient des métadonnées à propos de la classe:

  • nom
  • package
  • méthodes
  • champs
  • les constructeurs
  • les annotations

et quelques méthodes utiles comme le casting et les différents contrôles (isAbstract(), isPrimitive(), etc). la javadoc montre exactement ce que l'information que vous pouvez obtenir sur une classe.

Ainsi, par exemple, si une méthode de la vôtre est un objet, et que vous voulez traiter dans le cas où il est annoté avec l' @Processable d'annotation, puis:

public void process(Object obj) {
    if (obj.getClass().isAnnotationPresent(Processable.class)) {
       // process somehow; 
    }
}

Dans cet exemple, vous obtenir les métadonnées à propos de la classe de l'objet donné (quel qu'il soit), et de vérifier si elle a une annotation. Un grand nombre de méthodes sur un Class de l'instance sont appelés "réfléchissant opérations", ou simplement "la réflexion. Lire ici sur la réflexion, pourquoi et quand il est utilisé.

Notez également que les énumérations et les interfaces également représenter un Class objet, et ont les métadonnées.

Pour résumer chaque objet en java a (appartient à) une classe, et a un Class objet, qui contient des métadonnées sur elle, qui est accessible au moment de l'exécution.

49voto

Jan Thomä Points 4827

Un objet de Classe est une sorte de méta-objet décrivant la classe d'un objet. Il est principalement utilisé avec les capacités de réflexion de Java. Vous pouvez la considérer comme un "modèle" de la classe réelle. E. g. vous avez une Voiture de classe comme ceci:

public class Car {
    public String brand;
}

Vous pourrez alors créer un objet de Classe qui décrit votre "Voiture" classe.

Class myCarClass = Class.forName("Car");

Maintenant, vous pouvez faire toutes sortes d'interrogation sur votre Voiture de classe de Classe de l'objet:

myCarClass.getName() - returns "Car"
myCarClass.getDeclaredField("brand") - returns a Field object describing the "brand" field

et ainsi de suite. Chaque objet java a une méthode getClass() qui retourne la Classe de l'objet décrivant la Classe de l'objet Java. Donc, vous pourriez faire quelque chose comme:

Car myCar = new Car();
Class myCarClass  = myCar.getClass();

Cela fonctionne aussi pour les objets que vous ne connaissez pas, l'e.g les objets que vous obtenez à partir de l'extérieur:

public void tellMeWhatThisObjectsClassIs(Object obj) {
    System.out.println(obj.getClass().getName());
}

Vous pourrait nourrir cette méthode tout objet java, et il aura l'impression de la classe réelle de l'objet que vous avez donné.

Lorsque l'on travaille avec Java, la plupart du temps, vous n'avez pas besoin de s'inquiéter à propos des objets de la Classe. Ils ont un peu de pratique cas d'utilisation du bien. E. g. ils vous permettent de programmation pour instancier des objets d'une certaine classe, qui est souvent utilisé pour objet de sérialisation et de désérialisation (par exemple, la conversion des Objets Java pour XML et à l'arrière, ainsi la plupart du temps de retour).

Class myCarClass = Class.forName("Car");
Car myCar = myCarClass.newInstance();  // is roughly equivalent to = new Car();

Vous pouvez également l'utiliser pour trouver la déclarer tous les champs ou de méthodes de votre classe, etc, ce qui est très utile dans certains cas. Donc par exemple, si votre méthode est remis un objet inconnu et vous avez besoin d'en savoir plus sur elle, comme si elle imlements une interface etc, la Classe la classe est votre ami ici.

Donc pour faire une histoire courte, la Classe, Champ, Méthode, etc. les classes qui sont dans le java.lang.réfléchir package vous permettent d'analyser votre défini des classes, des méthodes, des champs, de créer de nouvelles instances d'entre eux, l'appel des méthodes toutes sortes d'autres choses et ils vous permettent de le faire dynamiquement à l'exécution.

8voto

ColinD Points 48573

getClass() est une méthode qui retourne un objet qui est une instance de java.lang.Class ... il n'y a pas de casting impliqué. Le casting ressemblerait à ceci:

 Class<?> type = (Class<?>) object;
 

3voto

Pakka Techie Points 329

Un objet de classe est une instance de classe (java.lang.Class). Ci-dessous, une citation tirée du javadoc de la classe devrait répondre à votre question

La classe n'a pas de constructeur public. Au lieu de cela, les objets de classe sont construits automatiquement par la machine virtuelle Java lors du chargement des classes et par des appels à la méthode defineClass dans le chargeur de classes.

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