Quel est le mécanisme de réflexion de Java ?
Le mécanisme de réflexion JAVA est en cours d'exécution. Pour n'importe quelle classe, vous pouvez connaître toutes les propriétés et méthodes de cette classe Pour n'importe quel objet, vous pouvez appeler n'importe laquelle de ses méthodes ; et les attributs ; ces informations obtenues dynamiquement et la fonction d'appel dynamique des méthodes objet sont appelées le mécanisme de réflexion du langage Java.
Afin de disséquer une classe, vous devez d'abord obtenir l'objet fichier bytecode de la classe. La dissection utilise les méthodes de la classe Class. Vous devez donc d'abord obtenir l'objet de type Class correspondant à chaque fichier de bytecode
La réflexion consiste à mapper les différents composants de la classe Java en objet Java
Par exemple : une classe possède : des variables membres, des méthodes, des constructeurs, des packages et d'autres informations. La technologie de réflexion peut être utilisée pour disséquer une classe et mapper chaque composant dans un objet. L'image montre le processus de chargement normal d'une classe : le principe de réflexion réside dans l'objet de classe. Soyez familier avec le processus de chargement : l'origine de l'objet Class est de lire le fichier de classe en mémoire et de créer un objet Class pour celui-ci.Trois façons d'obtenir des objets de classe
1.1 Objet ——> getClass(); 1.2 Tout type de données (y compris les types de données de base) possède un attribut de classe « statique » 1.3 Via la méthode statique de la classe Class : forName (String className) (couramment utilisé) où 1.1 est En raison de la méthode getClass dans la classe Object, car toutes les classes héritent de la classe Object. Appelant ainsi la classe Object pour obtenirExemple : Appel de la méthode définie par la classe par réflexion
@Test // 通过反射调用类定义的方法 public void testInvokeMethod() throws Exception { Class clazz = Class.forName("java.lang.String"); // 定义参数类型 Class[] params = new Class[1]; params[0] = String.class; Method m = clazz.getDeclaredMethod("indexOf", params); // 设置参数 Object[] p = new Object[1]; p[0] = "e"; Integer s = (Integer) m.invoke("helloworld!", p); System.out.println(s); }
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!