Home > Java > javaTutorial > How does Java reflection mechanism obtain class methods and member variables?

How does Java reflection mechanism obtain class methods and member variables?

WBOY
Release: 2024-05-03 21:21:01
Original
826 people have browsed it

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.

How does Java reflection mechanism obtain class methods and member variables?

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();
Copy after login

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();
Copy after login

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();
Copy after login

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);
Copy after login

Get members of a class Variables

To get all member variables of a class, you can use the getFields() method:

Field[] fields = clazz.getFields();
Copy after login

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();
Copy after login

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);
Copy after login

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 + "]";
    }
}
Copy after login

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!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template