Cet article présente principalement le rôle de la classe Class en Java et les informations associées pour une compréhension approfondie. J'espère que cet article pourra aider tout le monde à comprendre cette partie du contenu. Les amis dans le besoin pourront s'y référer
Le rôle et la compréhension approfondie de la classe Class en Java
Pendant l'exécution du programme, le système d'exécution Java maintient toujours un identifiant de type appelé runtime pour tous les objets. Ces informations permettent de garder une trace de la classe à laquelle appartient chaque objet. La JVM utilise les informations d'exécution pour sélectionner la méthode d'exécution appropriée. La classe qui contient ces informations s'appelle Class. Il peut être facile de semer la confusion et il est facile de penser à la classe. Cependant, les deux n’ont rien à voir l’un avec l’autre. Class est juste un mot-clé décrivant une classe. La classe est une classe qui stocke les informations d'exécution. Que peut-il faire ? La classe Class peut nous aider à analyser la classe lorsque le programme est en cours d'exécution, pour parler franchement, il s'agit d'obtenir la valeur dans la classe. Peut-être que j'ai tout de suite pensé à la réflexion, oui ! Class est généralement utilisé conjointement avec la réflexion, car nous fournissons une classe ou le nom de classe d'une classe à Class, et Class peut nous fournir de nombreuses informations, telles que des attributs/méthodes/modificateurs/constructeurs/noms de classe, etc. On peut alors aller plus loin dans la réflexion. Cependant, commençons par comprendre brièvement le contenu et l’utilisation de la classe Class ! Nous utilisons généralement la méthode suivante pour obtenir l'objet Class :String str = new String(); Class cl = str.getClass();Parce que cette classe contient trop d'informations, nous pouvons l'utiliser pour obtenir champs/méthodes et constructeurs spécifiques à une classe A. Voici quelques méthodes couramment utilisées :
public static void main(String[] args) throws Exception { // 以String.class为例 String str = new String(); Class cl = str.getClass(); /** * 获取包名+类名<br> * java.lang.String */ cl.getName(); /** * 只获取类名 - String */ cl.getSimpleName(); /** * 获取数组的Class对象<br> * 因为所有的Java类都继承自Object,数组也一样.所以数组本身也是个Class, 得到数组的Class自然也可以转回数组. */ cl.getComponentType(); /** * 返回构造器数组,包括超类的公有成员. */ cl.getConstructors(); /** * 返回方法数组,包括超类的公有成员. */ cl.getMethods(); /** * 返回域数组,包括超类的公有成员. */ cl.getFields(); /** * 返回全部构造器数组,无论是public/private还是protected,不包括超类的成员. */ cl.getDeclaredConstructors(); /** * 返回全部域数组,无论是public/private还是protected,不包括超类的成员. */ cl.getDeclaredFields(); /** * 返回全部方法数组,无论是public/private还是protected,不包括超类的成员. */ cl.getDeclaredMethods(); /** * 获取类前的修饰符 */ cl.getModifiers(); }Nous pouvons obtenir l'objet Class via une classe puis obtenir ce type d'informations. Vous pouvez également obtenir l'objet Class par son nom de classe complet.
Class cl = Class.forName("java.lang.String");Avec l'objet Class de cette classe, nous pouvons créer des objets de cette classe. Le moyen le plus pratique et le plus rapide consiste à appeler newInstance(). Par défaut, il appelle le constructeur sans argument pour renvoyer un objet.
String str = (String)(Class.forName("java.lang.String").newInstance());Ce qui suit utilise Constructor pour créer un objet en obtenant le constructeur :
// 调用无参的私有构造函数 Constructor c1 = Class.forName("java.lang.String") .getDeclaredConstructor(); c1.setAccessible(true); String str1 = (String) c1.newInstance(); // 调用有参的私有构造函数 Constructor c2 = Class.forName("java.lang.String") .getDeclaredConstructor(new Class[] { String.class }); c2.setAccessible(true); String str2 = (String) c2.newInstance("hello");Le cours n'est pas trop difficile car c'est un cours d'information. Suivez les classes au moment de l’exécution et maîtrisez toutes les informations sur la classe.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!