Définition
La capacité d'obtenir et de manipuler dynamiquement des éléments tels que des classes, des méthodes, des propriétés, etc. pendant l'exécution d'un programme Java est appelé réflexion Java. Cela nous permet d'obtenir des informations sur une classe et d'opérer dessus pendant que le programme est en cours d'exécution, ce qui augmente considérablement la flexibilité et l'évolutivité du langage Java.
En Java, chaque classe a un objet Class correspondant, et la réflexion utilise cet objet Class pour obtenir et exploiter les informations de classe.
Obtenir un objet de classe
En Java, il existe trois façons d'obtenir un objet de classe :
1.1 Obtenir un objet de classe par nom de classe
C'est le moyen le plus courant, en utilisant la méthode Class.forName() pour obtenir l'objet Class. Par exemple :
Class<?> clazz = Class.forName("com.example.MyClass");
1.2 Obtention de l'objet Class via l'objet
Vous pouvez obtenir l'objet Class auquel il appartient via la méthode getClass() de l'objet. Par exemple :
MyClass obj = new MyClass(); Class<?> clazz = obj.getClass();
1.3 Obtenez un objet de classe via une constante littérale de classe
Utilisez une constante littérale de classe pour obtenir un objet de classe, par exemple :
Class<?> clazz = MyClass.class;
Get l'objet de classe Informations
En obtenant l'objet Class, nous pouvons obtenir diverses informations sur la classe, telles que le nom de la classe, la classe héritée, l'interface implémentée, le constructeur, les méthodes et les champs, etc. Ce qui suit est un exemple d’obtention des champs d’une classe.
2.1 Récupérer tous les champs
Vous pouvez obtenir tous les champs publics modifiés via la méthode getFields() de l'objet Class, par exemple :
Field[] fields = clazz.getFields(); for (Field field : fields) { System.out.println(field.getName()); }
2.2 Récupérer le champ spécifié
Vous pouvez obtenir le champ public modifié avec le nom spécifié via la méthode getField() de l'objet Class, par exemple :
Field field = clazz.getField("name"); System.out.println(field.getName());
2.3 Récupérer tout champs déclarés
#🎜 🎜#Vous pouvez obtenir tous les champs déclarés via la méthode getDeclaredFields() de l'objet Class, y compris les champs publics, protégés et privés modifiés, par exemple :Field[] fields = clazz.getDeclaredFields(); for (Field field : fields) { System.out.println(field.getName()); }2.4 Récupérer les champs déclarés spécifiés
#🎜 🎜#Vous pouvez obtenir les champs déclarés du nom spécifié via la méthode getDeclaredField() de l'objet Class, y compris les champs modifiés par public, protected et private, par exemple : #🎜 🎜#Field field = clazz.getDeclaredField("name");
System.out.println(field.getName());
Classes et objets d'opération#🎜 🎜#Une fois que nous avons obtenu les informations de classe, nous pouvons utiliser la réflexion pour faire fonctionner des classes et des objets, comme créer des objets, appeler des méthodes et accéder aux propriétés. Ce qui suit est un exemple de création d'objets et d'accès aux propriétés.
3.1 Création d'objets
Vous pouvez créer des objets via la méthode newInstance() de l'objet Class, par exemple :
MyClass obj = (MyClass) clazz.newInstance();
3.2 Accéder aux propriétés # 🎜🎜#
Vous pouvez accéder aux propriétés d'un objet par réflexion, notamment en obtenant et en définissant les valeurs des propriétés. Par exemple :Field field = clazz.getDeclaredField("name"); field.setAccessible(true); field.set(obj, "张三"); String name = (String) field.get(obj);Le code ci-dessus obtient d'abord l'attribut de nom de la classe et le définit comme accessible, puis définit la valeur d'attribut sur "Zhang San" par réflexion, et enfin obtient la valeur d'attribut et attribue pour nommer la variable. Scénarios d'application ReflectionReflection est largement utilisé en Java. Les scénarios courants incluent : 4.1 Injection de dépendances
# 🎜🎜#Dépendance. L'injection est une méthode d'injection dynamique de dépendances dans une classe par réflexion. Par exemple, l'injection de dépendances dans le framework Spring est implémentée par réflexion.
4.2 Analyse du fichier de configuration
En Java, les fichiers de configuration tels que XML et JSON peuvent être analysés par réflexion et les données du fichier de configuration peuvent être converties en objets Java.
4.3 Proxy dynamique
Le proxy dynamique est une méthode de génération de classes proxy par réflexion. Les proxys dynamiques permettent de générer des objets proxy au moment de l'exécution pour améliorer ou intercepter les objets cibles.
Avantages et inconvénients de la réflexion
La flexibilité et l'évolutivité de Java peuvent être obtenues en obtenant et en exploitant dynamiquement les informations de classe au moment de l'exécution, ce qui constitue l'avantage de la réflexion. La réflexion peut réaliser certaines fonctions qui ne peuvent pas être réalisées par les méthodes traditionnelles, telles que le proxy dynamique, l'injection de dépendances, etc.
En raison de la nécessité d'obtenir et d'exploiter dynamiquement les informations de classe au moment de l'exécution, les opérations de réflexion fonctionnent généralement moins bien que l'opération directe des classes, ce qui constitue un défaut de la réflexion. L'utilisation de la réflexion réduit la lisibilité du code, car le code qui appelle les méthodes d'un objet ou accède aux propriétés est généralement plus simple et plus clair que le code qui utilise la réflexion.
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!

L'article discute de l'utilisation de Maven et Gradle pour la gestion de projet Java, la construction de l'automatisation et la résolution de dépendance, en comparant leurs approches et leurs stratégies d'optimisation.

L'article discute de la création et de l'utilisation de bibliothèques Java personnalisées (fichiers JAR) avec un versioning approprié et une gestion des dépendances, à l'aide d'outils comme Maven et Gradle.

L'article examine la mise en œuvre de la mise en cache à plusieurs niveaux en Java à l'aide de la caféine et du cache de goyave pour améliorer les performances de l'application. Il couvre les avantages de configuration, d'intégration et de performance, ainsi que la gestion de la politique de configuration et d'expulsion le meilleur PRA

L'article discute de l'utilisation de JPA pour la cartographie relationnelle des objets avec des fonctionnalités avancées comme la mise en cache et le chargement paresseux. Il couvre la configuration, la cartographie des entités et les meilleures pratiques pour optimiser les performances tout en mettant en évidence les pièges potentiels. [159 caractères]

Le chargement de classe de Java implique le chargement, la liaison et l'initialisation des classes à l'aide d'un système hiérarchique avec Bootstrap, Extension et Application Classloaders. Le modèle de délégation parent garantit que les classes de base sont chargées en premier, affectant la classe de classe personnalisée LOA


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

Télécharger la version Mac de l'éditeur Atom
L'éditeur open source le plus populaire

Adaptateur de serveur SAP NetWeaver pour Eclipse
Intégrez Eclipse au serveur d'applications SAP NetWeaver.

Listes Sec
SecLists est le compagnon ultime du testeur de sécurité. Il s'agit d'une collection de différents types de listes fréquemment utilisées lors des évaluations de sécurité, le tout en un seul endroit. SecLists contribue à rendre les tests de sécurité plus efficaces et productifs en fournissant facilement toutes les listes dont un testeur de sécurité pourrait avoir besoin. Les types de listes incluent les noms d'utilisateur, les mots de passe, les URL, les charges utiles floues, les modèles de données sensibles, les shells Web, etc. Le testeur peut simplement extraire ce référentiel sur une nouvelle machine de test et il aura accès à tous les types de listes dont il a besoin.

VSCode Windows 64 bits Télécharger
Un éditeur IDE gratuit et puissant lancé par Microsoft