Introduction détaillée au mécanisme de réflexion Java
Cet article de la rubrique Introduction à la programmation Java présente en détail le mécanisme de réflexion en Java, dans l'espoir d'aider les étudiants qui ne comprennent pas ce mécanisme. Le mécanisme de
réflexion Java
est en cours d'exécution Pour n'importe quelle classe, il peut connaître toutes les propriétés et méthodes de cette classe (y compris les privées) ; object , peut appeler n'importe laquelle de ses méthodes et propriétés ; cette fonction d'obtention dynamique d'informations et d'appel dynamique de méthodes objet est appelée mécanisme de réflexion de Java.
Objectif :
Déterminer la classe à laquelle appartient tout objet au moment de l'exécution.
Construisez un objet de n'importe quelle classe au moment de l'exécution.
Jugez les variables membres et les méthodes de n'importe quelle classe au moment de l'exécution.
Appelez la méthode de n’importe quel objet au moment de l’exécution.
Générer un proxy dynamique.
Classes liées à la réflexion
classe de classe
obtenues dans le programme Java Objets de classe ont généralement les trois méthodes suivantes :
1. Utilisez la méthode statique forName (String clazzName) de la classe Class. Cette méthode nécessite de transmettre un paramètre chaîne dont la valeur est le nom complet d'une classe (le nom complet du package doit être ajouté).
2. Appelez l'attribut de classe d'une certaine classe pour obtenir l'objet Class correspondant à la classe.
3. Appelez la méthode getClass() d'un objet. Cette méthode est une méthode de la classe java.lang.Object.
Champ
Field[] allFields = class2.getDeclaredFields();//获取class对象的所有属性 Field[] publicFields = class2.getFields();//获取class对象的public属性 Field ageField = class2.getDeclaredField("age");//获取class指定属性,可以获得私有属性 Field desField = class2.getField("des");//获取class指定的public属性
Méthode
Method[] methods = class2.getDeclaredMethods();//获取class对象的所有声明方法 Method[] allMethods = class2.getMethods();//获取class对象的所有public方法 包括父类的方法 Method method = class2.getMethod("info", String.class);//返回次Class对象对应类的、带指定形参列表的public方法 Method declaredMethod = class2.getDeclaredMethod("info", String.class);//返回次Class对象对应类的、 带指定形参列表的方法
Constructeur
Constructor<?>[] allConstructors = class2.getDeclaredConstructors();//获取class对象的所有声明构造函数 Constructor<?>[] publicConstructors = class2.getConstructors();//获取class对象public构造函数 Constructor<?> constructor = class2.getDeclaredConstructor(String.class);//获取指定声明构造函数 Constructor publicConstructor = class2.getConstructor(String.class);//获取指定声明的public构造函数
Générer des objets d'instance par réflexion
1 Utilisez la méthode newInstance() de l'objet Class pour créer une instance de la classe correspondante de l'objet Class. Cette méthode nécessite que la classe correspondante de l'objet Class ait un constructeur par défaut, et lorsque la méthode newInstance() est exécutée, le constructeur par défaut est en fait utilisé pour créer une instance de la classe.
2. Utilisez d'abord l'objet Class pour obtenir l'objet Constructor spécifié, puis appelez la méthode newInstance() de l'objet Constructor pour créer une instance de la classe correspondante de l'objet Class. De cette façon, vous pouvez choisir d'utiliser un constructeur spécifié pour créer l'instance.
Appeler la méthode
1. Obtenez la méthode spécifiée via la méthode getMethods() ou la méthode getMethod() de l'objet Class et renvoyez le tableau ou l'objet Method.
2. Appelez la méthode Object Invoke(Object obj, Object… args) dans l'objet Method. Le premier paramètre correspond à l'objet instance appelant la méthode, et le deuxième paramètre correspond aux paramètres de la méthode.
Exemple de code :
Qu'est-ce que la réflexion ?
package am; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.Arrays; import javax.activation.FileDataSource; /** * 反射是什么: * java中的反射:就是在类的加载过程中,发现类的属性和方法构造方法等信息。可以获得类的属性值,可以调用类的方法。 * * * 反射获得类的对象。 * */ public class Demo01 { public static void main(String[] args) throws Exception{ // 通过反射,获取类的对象。 Object obj = create("am.Foo");; Foo foo = (Foo)obj; System.out.println(foo.a); double dou = foo.show(12, "hello"); System.out.println(dou); System.out.println("======================================"); // 获得类的属性 showField(obj); System.out.println("======================================"); double a = (double)getFieldValue(obj, "b"); System.out.println(a); System.out.println("========================================"); // 通过反射调用方法。 Object ob = getMethodValue(obj,"show",new Class[]{int.class,String.class},new Object[]{23,"abc"}); double douValue = (double)ob; System.out.println(douValue); } //通过反射调用方法,哪个对象,什么名称,参数类型,参数值 public static Object getMethodValue(Object obj,String method,Class[] paramType,Object[] param) throws Exception{ Class cla = obj.getClass(); Method me = cla.getDeclaredMethod(method, paramType); Object o = me.invoke(obj, param); return o; } // 获取类的属性值: public static Object getFieldValue(Object obj,String name)throws Exception{ Class cla = obj.getClass();// 获取字节码对象。 Field field = cla.getDeclaredField(name);// 通过属性的名称。获取当前属性。 Object result = field.get(obj); return result; } // 通过反射,可以获得类的属性信息以及方法信息。 public static void showField(Object obj){ // java中对属性类。 Field 方法类:Method Class cla = obj.getClass(); System.out.println("获取类名:"+cla.getName()); System.out.println("======================================"); // 获取类的属性: Field[] fields = cla.getDeclaredFields();// 获取公开的属性。 for(Field field : fields){ System.out.println("获取类的属性类型"+field.getType()); System.out.println("获取类的属性名称:"+field.getName()); } System.out.println("======================================"); // 获取类的方法。 Method[] methods = cla.getDeclaredMethods(); for(Method method : methods){ System.out.println("获取方法的返回值类型:"+method.getReturnType()); System.out.println("获取方法名称:"+method.getName()); System.out.println("获取方法的参数类型。"+Arrays.toString(method.getParameterTypes())); } System.out.println("======================================="); // 获取类的构造方法: Constructor[] cons = cla.getDeclaredConstructors(); for(Constructor con : cons){ System.out.println("构造方法的名字:"+con.getName()); System.out.println("构造方法参数类型:"+Arrays.toString(con.getParameterTypes())); } } // 如何反射类的实例。 public static Object create(String name) throws Exception{ // 反射的方法。Class.forName(); Class cla = Class.forName(name); // 如何获得Object类型对象。 Object obj = cla.newInstance(); return obj; } } // 模拟类。 class Foo{ int a = 10; double b = 20; public double show(int p,String str){ System.out.println("调用方法传入的值是:"+str); return a+b+p; } public Foo(){ } public Foo(int a,int b){ } }
Autres recommandations de vidéos d'apprentissage connexes : tutoriel vidéo Java
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Guide du nombre parfait en Java. Nous discutons ici de la définition, comment vérifier le nombre parfait en Java ?, des exemples d'implémentation de code.

Guide du générateur de nombres aléatoires en Java. Nous discutons ici des fonctions en Java avec des exemples et de deux générateurs différents avec d'autres exemples.

Guide de Weka en Java. Nous discutons ici de l'introduction, de la façon d'utiliser Weka Java, du type de plate-forme et des avantages avec des exemples.

Guide du nombre de Smith en Java. Nous discutons ici de la définition, comment vérifier le numéro Smith en Java ? exemple avec implémentation de code.

Dans cet article, nous avons conservé les questions d'entretien Java Spring les plus posées avec leurs réponses détaillées. Pour que vous puissiez réussir l'interview.

Java 8 présente l'API Stream, fournissant un moyen puissant et expressif de traiter les collections de données. Cependant, une question courante lors de l'utilisation du flux est: comment se casser ou revenir d'une opération FOREAK? Les boucles traditionnelles permettent une interruption ou un retour précoce, mais la méthode Foreach de Stream ne prend pas directement en charge cette méthode. Cet article expliquera les raisons et explorera des méthodes alternatives pour la mise en œuvre de terminaison prématurée dans les systèmes de traitement de flux. Lire plus approfondie: Améliorations de l'API Java Stream Comprendre le flux Forach La méthode foreach est une opération terminale qui effectue une opération sur chaque élément du flux. Son intention de conception est

Guide de TimeStamp to Date en Java. Ici, nous discutons également de l'introduction et de la façon de convertir l'horodatage en date en Java avec des exemples.

Les capsules sont des figures géométriques tridimensionnelles, composées d'un cylindre et d'un hémisphère aux deux extrémités. Le volume de la capsule peut être calculé en ajoutant le volume du cylindre et le volume de l'hémisphère aux deux extrémités. Ce tutoriel discutera de la façon de calculer le volume d'une capsule donnée en Java en utilisant différentes méthodes. Formule de volume de capsule La formule du volume de la capsule est la suivante: Volume de capsule = volume cylindrique volume de deux hémisphères volume dans, R: Le rayon de l'hémisphère. H: La hauteur du cylindre (à l'exclusion de l'hémisphère). Exemple 1 entrer Rayon = 5 unités Hauteur = 10 unités Sortir Volume = 1570,8 unités cubes expliquer Calculer le volume à l'aide de la formule: Volume = π × r2 × h (4
