


Introduction détaillée à la réflexion Java pour obtenir des informations sur les classes et les objets
La réflexion peut résoudre le problème selon lequel il est impossible de prédire au moment de la compilation à quel objet et classe appartiennent, et les informations de l'objet et de la classe ne peuvent être connues que sur la base des informations lorsque le programme est en cours d'exécution.
Lorsque deux personnes collaborent au développement, il vous suffit de connaître le nom de classe de l'autre partie pour effectuer le développement préliminaire.
Obtenir l'objet de classe
Méthode statique Class.forName(String clazzName)
Appeler l'attribut de classe de la classe , La classe Person. renvoie l'objet de classe Person (recommandé)
Appeler la méthode getClass() d'un objet
Obtenir le constructeur de classeUtilisation spécifique Vous devez toujours choisir en fonction des conditions réelles. La première méthode est relativement gratuite. Il vous suffit de connaître le nom d'une classe. Elle ne vérifiera pas si la classe existe. >Obtenir des informations sur la classe
- : renvoie la classe correspondante de cet objet Class avec les paramètres formels spécifiés du constructeur public
Connstructor<T> getConstructor(Class<?>...parameterTypes)
: Renvoie tous les constructeurs publics de la classe correspondant à cet objet Class Constructor<?>[] getConstructors()
: Renvoie cet objet de classe Le constructeur avec les paramètres spécifiés de la classe correspondante n'a rien à voir avec les droits d'accès du constructeur Constructor<T>[] getDeclaredConstructor(Class<?>...parameterTypes)
: Renvoie tous les constructeurs de la classe correspondante de cet objet classe, et les droits d'accès du constructeur Non pertinent-
Obtenir la méthode membre de la classeConstructor<?>[] getDeclaredConstructors()
- : renvoie la méthode publique avec les paramètres formels spécifiés de la classe correspondante de cet objet de classe
-
Method getMethod(String name,Class<?>...parameterTypes)
: Renvoie toutes les méthodes publiques de la classe représentée par cet objet de classe Method[] getMethods()
: Renvoie la classe spécifiée correspondant à cet objet de classe. La méthode du paramètre formel n'a rien à voir avec les droits d'accès à la méthode Method getDeclaredMethod(string name,Class<?>...parameterTypes)
: Renvoie toutes les méthodes de la classe correspondante de cet objet classe, n'a rien à voir avec la méthode droits d'accès -
Obtenir les variables membres de la classeMethod[] getDeclaredMethods()
- : Renvoie la variable membre publique du nom spécifié correspondant à cet objet de classe
Field getField(String name)
: Renvoie toutes les variables membres publiques de la classe correspondant à cet objet de classe. Field[] getFields()
: Renvoie la variable membre avec l'objet spécifié nom de la classe correspondant à cet objet de classe, quelles que soient les autorisations d'accès aux variables membresField getDeclaredField(String name)
: Renvoie toutes les variables membres de la classe correspondant à cet objet de classe, quels que soient les droits d'accès des variables membres-
Obtenir les annotations de classeField[] getDeclaredFields()
- : Essayez d'obtenir le type d'annotation spécifié de la classe correspondante de la classe objet. Si l'annotation de type n'existe pas, retournez null
<A extends Annotation>A getAnnotation(Class<A>annotationClass)
: C'est une nouveauté dans Java 8. Cette méthode obtient l'annotation du type spécifié qui modifie directement la classe correspondante. de l'objet de classe. S'il n'existe pas, il renvoie null<A extends Annotation>A getDeclaredAnnotation(Class<A>annotationClass)
: renvoie toutes les annotations Annotation[] getAnnotations()
qui modifient. la classe correspondante de cet objet de classe : renvoie toutes les annotations qui modifient la classe correspondante de cet objet de classeAnnotation[] getDeclaredAnnotations()
: la fonction de cette méthode est fondamentalement similaire à la méthode getAnnotation() introduit plus tôt, mais comme Java8 a ajouté la fonction d'annotation répétée, vous devez utiliser cette méthode pour obtenir plusieurs annotations du type spécifié qui modifient la classe<A extends Annotation>A[] getAnnotationByType(Class<A>annotationClass)
: La fonction de cette méthode est similaire à la méthode getDeclaredAnnotations() introduite précédemment. C'est également à cause de la fonction d'annotation répétée de Java8. Vous devez utiliser cette méthode pour obtenir le type spécifié qui modifie directement la classe. Récupérer la classe interne de cette classe
<A extends Annotation>A[] getDeclaredAnnotationByType(Class<A>annotationClass)
: Renvoie toutes les classes internes contenues dans la classe correspondante de cette formation de classe
Récupérer la classe externe où se trouve l'objet de cette classe
Class<?>[] getDeclaredClasses()
: Renvoie la classe externe où se trouve la classe correspondante de l'objet Class
Récupérer l'interface implémentée par la classe correspondante de cet objet classe
Class<?> getDeclaringClass()
: Renvoie toutes les interfaces implémentées par la classe correspondante de cet objet Classe
Récupérer la classe parent héritée par la classe correspondante de cet objet de classe
Class<? super T> getSuperclass()
: Renvoie l'objet Class de la super classe de la classe correspondante de cet objet Classe
Obtenir le modificateur, le package, le nom de la classe et d'autres informations de base correspondant à l'objet classe
int getModifiers()
: Retour la classe ou l'interface Tous les modificateurs sont composés de constantes publiques, protégées, privées, finales, statiques, abstraites et autres constantes correspondantes. Le entier renvoyé doit être décodé à l'aide de la méthode de la classe d'outils Modifier pour obtenir le vrai modificateur. .Package getPackage()
: Obtenez le package de cette classeString getName()
: Renvoyez cette CLAss sous forme de String. L'abréviation de la classe représentée par l'objet
Déterminer si la classe est un type d'interface, d'énumération ou d'annotation
boolean isAnnotation()
: Renvoie cette classe Si l'objet représente un type d'annotationboolean isAnnotationPresent(Class<? extends Annotation>annotationClass)
: Détermine si cet objet Classe est décoré avec la classe Annotationboolean isAnonymousClass()
: Renvoie cette classe Si l'objet est une classe anonymeboolean isArray()
: Renvoie si cet objet de classe représente un tableauclassboolean isEnum()
: Renvoie si cet objet de classe représente une énumérationboolean isInterface()
: Renvoie si cet objet de classe représente une interfaceboolean isInstance(<a href="http://www.php.cn/wiki/60.html" target="_blank">Object<code>boolean isInstance(<a href="http://www.php.cn/wiki/60.html" target="_blank">Object</a> obj)
obj ) : Déterminer obj Qu'il s'agisse d'une instance de cet objet de classe, cette méthode peut remplacer complètement l'instanceofoperator
public interface Colorable { public void value(); }
public class ClassInfo { public static void main(String[] args) throws NoSuchMethodException, SecurityException { Class<Colorable> cls=Colorable.class; System.out.println(cls.getMethod("value")); System.out.println(cls.isAnnotation()); System.out.println(cls.isInterface()); } }
结果
public abstract void com.em.Colorable.value() false true
Nouvelle réflexion des paramètres de méthode en Java 8
int getParameterCount()
: Obtenez le nombre de paramètres formels du constructeur ou de la méthodeParameter[] getParameters()
: Récupère tous les paramètres formels du constructeur ou de la méthodegetModifiers()
: Récupère les modificateurs qui modifient les paramètres formelsString getName()
: Obtenez le nom du paramètre formelType getParameterizedType()
: Obtenez le type de paramètre formel avec des génériquesClass<?>getType()
: Obtenez le paramètre formel Typeboolean isNamePresent()
: Cette méthode renvoie si le fichier de classe de la classe contient les informations de nom de paramètre formel de la méthodeboolean isVarArgs()
: Cette méthode permet de déterminer si le paramètre est un nombre variable de paramètres formels
public class Test { public void getInfo(String str,List<String>list){ System.out.println("成功"); } }
public class ClassInfo { public static void main(String[] args) throws NoSuchMethodException, SecurityException { Class<Test> cls=Test.class; Method med=cls.getMethod("getInfo", String.class,List.class); System.out.println(med.getParameterCount()); Parameter[] params=med.getParameters(); System.out.println(params.length); for(Parameter par:params){ System.out.println(par.getName()); System.out.println(par.getType()); System.out.println(par.getParameterizedType()); } } }
结果
2 2 arg0 class java.lang.String class java.lang.String arg1 interface java.util.List java.util.List<java.lang.String>
objet généré par réflexion
Utilisez la méthode newInstance() de l'objet Class pour créer une instance de l'objet Class. Cette méthode nécessite un constructeur par défaut (plus. couramment utilisé)
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 la classe object
Méthode d'appel de réflexion
Object invoke(Object obj,Object...args)
: L'obj dans cette méthode est l'appel principal pour exécuter la méthode, et les arguments suivants sont les paramètres réels transmis à la méthode lors de l'exécution de la méthode
public class Test { public Test(String str) { System.out.println(str); } public void getInfo(String str){ System.out.println(str); } }
public class ClassInfo { public static void main(String[] args) throws Exception { Class<Test> cls=Test.class; Constructor<Test>construct=cls.getConstructor(String.class); Test test=construct.newInstance("初始化"); Method med=cls.getMethod("getInfo", String.class); med.invoke(test, "调用方法成功"); } }
结果
初始化 调用方法成功
Ensuite, l'agent examinera de plus près regardez les châtaignes ci-dessous
public class Test { public Test(String str) { System.out.println(str); } //私有方法 private void getInfo(String str){ System.out.println(str); } }
public class ClassInfo { public static void main(String[] args) throws Exception { Class<Test> cls=Test.class; Constructor<Test>construct=cls.getConstructor(String.class); Test test=construct.newInstance("初始化"); //为啥使用这个方法呢? Method med=cls.getDeclaredMethod("getInfo", String.class); //为啥使用这个方法呢? med.setAccessible(true); med.invoke(test, "调用方法成功"); } }
结果
初始化 调用方法成功
setAccessible(boolean flag): Définissez la valeur sur true, indiquant que l'accès au langage Java la vérification des autorisations doit être annulée lors de l'utilisation de cette méthode
Valeur de la variable membre d'accès
getXxx(Object obj)
: obtenez la valeur de cette variable membre de l'objet obj. Xxx correspond ici à 8 types de base. Si le type de la variable membre est de type référence , supprimez la partie XxxsetXxx(Object obj,Xxx val)
: changez l'objet obj. La variable membre est définie sur la valeur val. Le Xxx correspond ici aux 8 types de base. Si le type de la variable membre est un type référence, annulez le Xxx après set
Les deux méthodes ci-dessus peuvent accéder à tout. Variables de membres, y compris les variables de membres privés
public class Test { private int num; public Test(String str) { System.out.println(str); } private void getInfo(String str){ System.out.println(str); } public int getNum() { return num; } public void setNum(int num) { this.num = num; } }
public class ClassInfo { public static void main(String[] args) throws Exception { Class<Test> cls=Test.class; Constructor<Test>construct=cls.getConstructor(String.class); Test test=construct.newInstance("初始化"); Method med=cls.getDeclaredMethod("getInfo", String.class); med.setAccessible(true); med.invoke(test, "调用方法成功"); Field fld=cls.getDeclaredField("num"); fld.setAccessible(true); fld.setInt(test, 12); System.out.println(fld.getInt(test)); } }
结果
初始化 调用方法成功 12
Tableau d'opérations
sous java.lang. Reflect package Il existe une classe Array qui peut créer dynamiquement un tableau
static Object newInstance(Class<?>componentType,int...length)
: Créer un nouveau tableau avec un type d'élément spécifié et des dimensions spécifiées
static xxx getXxx(Object array,int index)
:返回array数组中第index个元素。其中xxx是各种基本数据类型,如果数组元素是引用类型,则该方法变为get()
static void setXxx(Object array,int index,xxx val)
:将array数组中低index 个元素的值设为val,其中xxx是各种基本数据类型,如果数组元素是引用类型,则该方法变为set()
public class ArrayInfo { public static void main(String[] args) { Object arrays=Array.newInstance(String.class, 3); Array.set(arrays, 0, "第一个"); Array.set(arrays, 1, "第二个"); Array.set(arrays, 2, "第三个"); System.out.println(Array.get(arrays, 2)); } }
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

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

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)

Sujets chauds











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

PHP est un langage de script largement utilisé du côté du serveur, particulièrement adapté au développement Web. 1.Php peut intégrer HTML, traiter les demandes et réponses HTTP et prend en charge une variété de bases de données. 2.PHP est utilisé pour générer du contenu Web dynamique, des données de formulaire de traitement, des bases de données d'accès, etc., avec un support communautaire solide et des ressources open source. 3. PHP est une langue interprétée, et le processus d'exécution comprend l'analyse lexicale, l'analyse grammaticale, la compilation et l'exécution. 4.PHP peut être combiné avec MySQL pour les applications avancées telles que les systèmes d'enregistrement des utilisateurs. 5. Lors du débogage de PHP, vous pouvez utiliser des fonctions telles que error_reportting () et var_dump (). 6. Optimiser le code PHP pour utiliser les mécanismes de mise en cache, optimiser les requêtes de base de données et utiliser des fonctions intégrées. 7

PHP et Python ont chacun leurs propres avantages, et le choix doit être basé sur les exigences du projet. 1.Php convient au développement Web, avec une syntaxe simple et une efficacité d'exécution élevée. 2. Python convient à la science des données et à l'apprentissage automatique, avec une syntaxe concise et des bibliothèques riches.

PHP convient au développement Web, en particulier dans le développement rapide et le traitement du contenu dynamique, mais n'est pas bon dans les applications de la science des données et de l'entreprise. Par rapport à Python, PHP présente plus d'avantages dans le développement Web, mais n'est pas aussi bon que Python dans le domaine de la science des données; Par rapport à Java, PHP fonctionne moins bien dans les applications au niveau de l'entreprise, mais est plus flexible dans le développement Web; Par rapport à JavaScript, PHP est plus concis dans le développement back-end, mais n'est pas aussi bon que JavaScript dans le développement frontal.

PHP et Python ont chacun leurs propres avantages et conviennent à différents scénarios. 1.PHP convient au développement Web et fournit des serveurs Web intégrés et des bibliothèques de fonctions riches. 2. Python convient à la science des données et à l'apprentissage automatique, avec une syntaxe concise et une bibliothèque standard puissante. Lors du choix, il doit être décidé en fonction des exigences du projet.

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

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

Les raisons pour lesquelles PHP est la pile technologique préférée pour de nombreux sites Web incluent sa facilité d'utilisation, son soutien communautaire solide et son utilisation généralisée. 1) Facile à apprendre et à utiliser, adapté aux débutants. 2) Avoir une énorme communauté de développeurs et des ressources riches. 3) Largement utilisé dans WordPress, Drupal et d'autres plateformes. 4) Intégrez étroitement aux serveurs Web pour simplifier le déploiement du développement.
