Lorsque le programme Java est en cours d'exécution, le système Java a toujours effectué l'identification de type d'exécution SO-Soald Type de tous les objets, le RTTI SO. Ces informations enregistrent la classe de chaque objet. La machine virtuelle utilise généralement la méthode correcte pour exécuter les informations de type à exécuter. La classe de classe résume l'état d'un objet et d'une interface.
Le résumé simple est le suivant:
La classe de classe est également une classe, mais le nom est similaire à celui du mot-clé de classe. Java est un langage sensible.
Le contenu de la classe est le type d'informations de la classe que vous avez créée.
Les objets de la classe ne peuvent pas être créés d'une manière nouvelle () comme une classe ordinaire.
Le rôle de la classe de classe est de fournir ou d'obtenir une information de type qui fournit ou obtient un certain objet pendant l'exécution, ce qui est similaire à la fonction typeID () en C ++. Ces informations peuvent également être utilisées pour la réflexion.
1. Principe de classe de classe
Nous savons tous que toutes les classes Java héritent de la classe d'objets. Classe de classe. Nous ne pouvons pas générer un objet de classe (le constructeur est privé), et l'objet de cette classe de classe est de créer automatiquement l'objet de classe par la machine virtuelle Java lorsqu'elle est transférée, ou elle est générée par la méthode DÉFINCLASS dans le chargeur. Les objets que nous générons auront un champ pour enregistrer l'emplacement de l'objet de l'objet dans la classe de classe de l'objet. Comme indiqué dans la figure ci-dessous:
2. Obtenez un objet de classe de classe
La première méthode est la fonction forname de la classe de classe
[La classe de codec façonne {}
Classe obj = class.forname ("formes");
La deuxième méthode consiste à utiliser l'objet de l'objet de l'objet
Copier le code du code comme suit: Class Shapes {}
Formes S1 = nouvelles formes ();
Classe obj = s1.getClass ();
Classe obj1 = s1.getsuperclass ();
La troisième méthode consiste à utiliser le type de type constant
Copier le code du code comme suit: obj = string.class;
Classe obj1 = int.class;
Notez que lors de l'utilisation de cette méthode pour générer l'objet de classe de classe, JVM ne chargera pas automatiquement la classe (telle que String). D'autres méthodes feront que JVM initialisera cette classe.
3. Utilisez l'objet de la classe de classe pour générer une instance de la classe cible
Instance d'objet inexacte
Après avoir obtenu un objet de la classe de classe, vous pouvez utiliser la fonction NewInstance () pour générer une instance de la classe cible. Cependant, cette fonction ne génère pas directement des instances de la classe cible et ne peut générer que des instances de la classe d'objets
Copier le code du code comme suit: obj = class.forname ("formes");
Forme d'objetInstance = obj.newinstance ();
Utilisez la classe de généralisation pour référencer l'instance cible du type de ceinture de type
Copier le code du code comme suit: Shapes> obj = shapes.class;
Shapes newshape = obj.newinstance ();
En raison de la limite de type, la référence de l'objet à la syntaxe de la classe de généralisation ne peut pas être dirigée vers d'autres catégories.
Copier le code du code comme suit: Class obj1 = int.class;
Class <Integer> obj2 = int.class;
obj1 = double.classe;
//Obj2=double.classe;
Cependant, il existe une utilisation flexible qui vous permet de pointer vers toute sous-classe de la classe de base avec des objets de classe.
Copier le code comme suit: Classe <?
obj = nombre.class;
obj = double.classe;
Par conséquent, l'objet de classe généré ci-dessous peut pointer vers n'importe quelle classe.
Copier le code du code comme suit: Class <?> Obj = int.class;
obj = double.classe;
obj = formes.class;
La dernière utilisation étrange est que lorsque vous utilisez cette syntaxe générique pour construire un objet de classe de base d'un objet d'une classe que vous avez à portée de main, vous devez utiliser la grammaire spéciale suivante
Copier le code du code comme suit: les formes de classe publique {}
Classe Round étend les formes {}
Class <Rand> rclass = rond.class;
Classe <??
// class <papes> sclass = rclass.getsuperclass ();
Nous savons que la classe de base de Round est des formes, mais elle ne peut pas déclarer directement la classe <omes> et doit utiliser une grammaire spéciale
Classe <?
Ce qui précède est tout le contenu de cet article.