Le mécanisme de réflexion Java est implémenté dans la machine virtuelle Java (JVM) via l'objet Class, qui contient des informations de métadonnées sur la classe. L'API Reflection fournit des classes et des interfaces telles que Classe, Champ, Méthode et Constructeur pour accéder à ces informations. Le mécanisme de réflexion permet d'obtenir des informations de classe (telles que le nom de la classe, les champs et les méthodes), d'obtenir des informations de champ (telles que le type et le nom), d'obtenir des informations de méthode (telles que le type de retour et le type de paramètre) et de modifier l'état de l'objet (telles que la modification champs privés) à la valeur d’exécution).
Implémentation du mécanisme de réflexion Java dans la machine virtuelle Java (JVM)
Introduction
Le mécanisme de réflexion Java est une fonctionnalité puissante et flexible qui permet aux programmes d'inspecter ou de modifier la structure d'une classe au moment de l'exécution et comportement. Cet article approfondira l'implémentation de la réflexion Java dans la JVM et l'expliquera à travers des cas pratiques.
Objet Classe
La machine virtuelle Java crée un objet Class
pour chaque classe chargée. Un objet Class
contient des informations de métadonnées sur une classe, telles que son nom, ses champs, ses méthodes et ses constructeurs. Class
对象。Class
对象包含有关类的元数据信息,例如类的名称、字段、方法和构造函数。
反射 API
反射 API 提供了一组类和接口,用于访问 Class 对象的元数据信息。最常用的类包括:
Class
:表示一个类。Field
:表示一个类中的字段。Method
:表示一个类中的方法。Constructor
L'API Reflection fournit un ensemble de classes et d'interfaces pour accéder aux informations de métadonnées des objets Class. Les classes les plus couramment utilisées incluent :
Class
: représente une classe.
Field
: Représente un champ dans une classe. Méthode
: Représente une méthode dans une classe. Constructeur
: Représente le constructeur d'une classe. Cas pratiques
Obtenir des informations sur la classe
// 获取 Class 对象 Class<?> cls = Class.forName("java.lang.String"); // 获取类名 System.out.println("类名:" + cls.getName()); // 获取类访问修饰符 System.out.println("类访问修饰符:" + Modifier.toString(cls.getModifiers()));Obtenir des informations sur le champ
// 获取指定字段的 Field 对象 Field field = cls.getDeclaredField("value"); // 获取字段类型 System.out.println("字段类型:" + field.getType().getName()); // 获取字段名称 System.out.println("字段名称:" + field.getName());🎜Obtenir des informations sur la méthode🎜🎜
// 获取指定方法的 Method 对象 Method method = cls.getMethod("length"); // 获取方法返回类型 System.out.println("方法返回类型:" + method.getReturnType().getName()); // 获取方法参数列表 Class<?>[] paramTypes = method.getParameterTypes(); for (Class<?> paramType : paramTypes) { System.out.println("方法参数类型:" + paramType.getName()); }🎜🎜Modifier le statut de l'objet🎜🎜 🎜Le mécanisme de réflexion peut également être utilisé pour modifier l'état de l'objet . 🎜
// 获取一个 String 对象 String str = "Hello World"; // 获取 String 对象的 Class 对象 Class<?> cls = str.getClass(); // 获取字段对象 Field field = cls.getDeclaredField("value"); // 设置字段为可访问(私有字段) field.setAccessible(true); // 修改字符串值 field.set(str, "Goodbye World"); // 输出修改后的字符串 System.out.println(str); // 输出:Goodbye World
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!