Java reflection mechanism allows dynamic access and manipulation of class information, including methods and member variables. To obtain methods, you can use the getMethods(), getReturnType() and getParameterTypes() methods. To obtain member variables, you can use the getFields() and get() methods. To obtain annotations, you can use the getAnnotations() method. To obtain parameter and return value types, you can use getParameterTypes( ) and getReturnType() method. In actual cases, the member variables and methods of the Person class can be dynamically obtained through the reflection mechanism.
Java reflection mechanism: obtaining class methods and member variables
The reflection mechanism is a powerful mechanism in Java that allows We dynamically access and operate class information, including methods and member variables.
Get the methods of the class
To get all the methods of the class, you can use getMethods()
Method:
Class<?> clazz = MyClass.class; Method[] methods = clazz.getMethods();
If If you only want to get methods of a specific type, you can use the overloaded getMethods()
method, for example:
Method[] getDeclaredMethods = clazz.getDeclaredMethods(); Method[] getPublicMethods = clazz.getMethods();
Get the method parameters and return value type of the class
To obtain the parameter and return value types of a method, you can use getParameterTypes()
and getReturnType()
method:
Method method = clazz.getMethod("myMethod"); Class<?>[] parameterTypes = method.getParameterTypes(); Class<?> returnType = method.getReturnType();
Get the method annotation of the class
To obtain method annotations, you can use getAnnotations()
and getAnnotation()
methods:
Annotation[] annotations = method.getAnnotations(); Annotation annotation = method.getAnnotation(MyAnnotation.class);
Get members of a class Variables
To get all member variables of a class, you can use the getFields()
method:
Field[] fields = clazz.getFields();
If you only want to get member variables of a specific type or visibility , you can use the overloaded getFields()
method, for example:
Field[] getDeclaredFields = clazz.getDeclaredFields(); Field[] getPublicFields = clazz.getFields();
Get the member variable value of the class
Get the value of the member variable Use the get()
method:
Field field = clazz.getField("myField"); Object value = field.get(myObject);
Practical case
Consider the following example, we want to dynamically obtain the class Person
Methods and member variables:
import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.Modifier; public class Main { public static void main(String[] args) { Class<?> clazz = Person.class; // 获取类的方法 for (Method method : clazz.getMethods()) { System.out.println("Method: " + method.getName()); System.out.println("Modifiers: " + Modifier.toString(method.getModifiers())); // 获取方法参数和返回值类型 System.out.println("Parameters:"); for (Class<?> parameterType : method.getParameterTypes()) { System.out.println(" - " + parameterType.getName()); } System.out.println("Return type: " + method.getReturnType().getName()); // 获取方法注解 for (Annotation annotation : method.getAnnotations()) { System.out.println("Annotation: " + annotation.annotationType().getName()); } System.out.println(); } // 获取类的成员变量 for (Field field : clazz.getDeclaredFields()) { System.out.println("Field: " + field.getName()); System.out.println("Modifiers: " + Modifier.toString(field.getModifiers())); System.out.println("Type: " + field.getType().getName()); System.out.println(); } } } class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + "]"; } }
This code will dynamically print all methods and member variables of class Person
.
The above is the detailed content of How does Java reflection mechanism obtain class methods and member variables?. For more information, please follow other related articles on the PHP Chinese website!