English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Sommaire de la lecture
API de réflexion Java
Réflexion JavaIl s'agit du processus de pouvoir obtenir les attributs et méthodes d'une classe ou de modifier le comportement d'une classe au moment de l'exécution.
Classe java.lang.ClassIl fournit de nombreuses méthodes pour obtenir des métadonnées, vérifier et modifier le comportement des classes au moment de l'exécution.
La réflexion en Java implique principalement les classes sous les packages java.lang et java.lang.reflect.
Exemples de scénarios d'application de la réflexion
Classe java.lang.Class
La classe java.lang.Class offre principalement deux fonctions :
Méthodes couramment utilisées de la classe java.lang.Class
Méthode | Description |
---|---|
1) public String getName() | Retourne le nom de la classe |
2) public static Class forName(String className) throws ClassNotFoundException | Charger la classe et retourner l'objet Class |
3) public Object newInstance() throws InstantiationException, IllegalAccessException | Créer un objet instance |
4) public boolean isInterface() | Jugement s'il s'agit d'une interface |
5) public boolean isArray() | Jugement s'il s'agit d'un tableau |
6) public boolean isPrimitive() | Jugement s'il s'agit d'un type de données primaires |
7) public Class getSuperclass() | Retourne une référence Class de la classe parente |
8) public Field[] getDeclaredFields() throws SecurityException | Retourne le tableau des champs de propriété membres de la classe |
9) public Method[] getDeclaredMethods() throws SecurityException | Retourne le tableau des méthodes de la classe |
10) public Constructor[] getDeclaredConstructors() throws SecurityException | Retourne le tableau des constructeurs de la classe |
11) public Method getDeclaredMethod(String name, Class[] parameterTypes) throws NoSuchMethodException, SecurityException | Retourne la méthode spécifique du type de paramètre de la classe |
Comment obtenir l'objet Class
Il y a trois méthodes, telles que :
méthode getClass() de l'objet, chargement statique (chargé au moment de la compilation)}
.class syntaxe, chargement statique (chargé au moment de la compilation)
package tmp; class Simple { } public class Test { forName() méthode exemple { try63Class< Agit sur le nom de la classe, et peut également être appliqué aux types de données primitives, comme suit : Simple s = new Simple(); } }
; extends Object> c = s.getClass(); System.out.println(c.getSimpleName());
Peut être utilisé pour le chargement dynamique, lorsque vous connaissez le nom complet de la classe. Notez que les types de données primitives ne sont pas applicables à cette méthode ;
public static void main(String args[]) throws ClassNotFoundException
package tmp; class Simple { } public class Test { getClass() méthode exemple : { } public static void main(String args[]) { Obtenir l'objet Class à partir de l'objet d'instance try63void printName(Object obj) Agit sur le nom de la classe, et peut également être appliqué aux types de données primitives, comme suit : Simple s = new Simple(); } }
; extends Object> c = s.getClass(); System.out.println(c.getSimpleName());
tmp.Simple
Simple
package tmp; public class Test { public static void main(String args[]) { .class syntaxe exemple Agit sur le nom de la classe, et peut également être appliqué aux types de données primitives, comme suit : Class<Boolean> c = boolean.class;2 System.out.println(c.getName()); System.out.println(c2Class<Test> c } }
= Test.class; .getName());
boolean
tmp.Test
1Déterminer le type de l'objet Class Les méthodes suivantes peuvent être utilisées pour déterminer le type de l'objet Class : |
2) public boolean isInterface(): ) public boolean isArray(): |
3) public boolean isPrimitive(): Correspondre-t-il au type de données original |
Exemple de code :
package tmp; class Simple { } interface My { } public class Test { public static void main(String args[]) { this.msg = s; { try63Class< System.out.println(c.isInterface()); try63;> c2 = Class.forName("tmp.My"); System.out.println(c2); } catch (Exception e) { System.out.println(e); } } }
false true
Créer une instance d'objet par reflection
Il y a deux méthodes, telles que :
所以,通常来讲,第二种方式比第一种使用范围更广。
Donc, généralement parlant, la deuxième méthode est plus large que la première en termes d'utilisation.
package tmp; class Simple { private String msg; { Exemple d'appel de la méthode newInstance() de l'objet Class } } public class Test { public static void main(String args[]) { this.msg = s; { try63Class< System.out.println("Hello Java"); s.message(); } catch (Exception e) { System.out.println(e); } } }
Simple s = (Simple) c.newInstance();
Hello Java
Exemple d'appel de la méthode newInstance() de l'objet Constructor
package tmp; Attention, ici, vous pouvez obtenir la méthode de construction spécifique en fonction du type des paramètres传入, et vous pouvez également modifier les restrictions d'accès de la méthode de construction. class Simple { import java.lang.reflect.Constructor; private String msg; { void message() + System.out.println("Hello Java," } msg); private Simple(String s){ } } public class Test { public static void main(String args[]) { this.msg = s; { try63Class< ;> c = Class.forName("tmp.Simple");63;> con = c.getDeclaredConstructor(String.class); con.setAccessible(true); Simple s = (Simple) con.newInstance("..."); s.message(); } catch (Exception e) { System.out.println(e); } } }
Hello Java,...
Appel de méthode privée via la réflexion
Grâce à la réflexion, nous pouvons appeler les méthodes privées d'autres classes, principalement impliquant les classes java.lang.Class et java.lang.reflect.Method;
Il utilise principalement les méthodes setAccessible() et invoke() de la classe Method, la première modifie les permissions d'accès, et la seconde appelle la méthode.
Exemple d'appel d'une méthode privée avec des paramètres :
package tmp; import java.lang.reflect.Method; class A { private void cube(int n) { System.out.println(n * n * n); } } class Test { public static void main(String args[]) throws Exception { Class<A> c = A.class; Object obj = c.newInstance(); Method m = c.getDeclaredMethod("cube", new Class[]{ int.class }); m.setAccessible(true); m.invoke(obj, 4); } }
À propos de l'outil javap
L'utilisation de la commande javap peut désassembler les fichiers bytecode Java, afficher les informations des champs, des attributs, des méthodes constructeurs et des méthodes normales du fichier class ;
Instructions d'utilisation :
Exemple javap java.lang.Object
javap -Exemple c Test :
Écrivez une classe Test simple, comme suit :
package tmp; class Simple { } public class Test { public static void main(String args[]) { System.out.println("Hello"); } }
Entrez javap -c Test:
Références
Il s'agit principalement de traduction, avec quelques modifications mineures
http://www.javatpoint.com/java-réflexion
Voici la totalité du contenu de cet article, j'espère que le contenu de cet article peut apporter un certain aide à votre apprentissage ou à votre travail, et j'espère également que vous pouvez soutenir davantage le tutoriel de cri !
Déclaration : Le contenu de cet article est issu du réseau, propriété de ses auteurs respectifs, contribué et téléversé par les utilisateurs d'Internet, ce site Web ne détient pas de propriété, n'a pas été traité par l'édition humaine et n'assume pas de responsabilité juridique. Si vous trouvez du contenu suspect de violation de copyright, vous êtes invité à envoyer un e-mail à : notice#w3Déclaration : Le contenu de cet article est issu du réseau, propriété de ses auteurs respectifs, contribué et téléversé par les utilisateurs d'Internet, ce site Web ne détient pas de propriété, n'a pas été traité par l'édition humaine et n'assume pas de responsabilité juridique. Si vous trouvez du contenu suspect de violation de copyright, vous êtes invité à envoyer un e-mail à : notice#w