什么是 Java 反射?(附示例代码)

更新时间 2023-04-03 22:01:57

Java 反射是指在运行时获取类的信息,并可以动态地操作对象或者调用方法。反射可以在运行时获取类的属性和方法,并且可以在运行时调用这些方法或者实例化对象,从而实现一些动态性的操作。

以下是一个简单的示例代码,演示如何通过反射获取类的信息和调用类的方法:

import java.lang.reflect.Method;

public class ReflectionExample {
    public static void main(String[] args) {
        try {
            // 获取类的 Class 对象
            Class<?> clazz = Class.forName("java.lang.String");

            // 获取类的所有方法
            Method[] methods = clazz.getDeclaredMethods();

            // 打印类的所有方法名
            for (Method method : methods) {
                System.out.println(method.getName());
            }

            // 动态调用类的方法
            Object obj = clazz.newInstance();
            Method method = clazz.getMethod("toUpperCase");
            String result = (String) method.invoke(obj, "hello");
            System.out.println(result);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

上述代码中,我们使用 Class.forName() 方法获取了 String 类的 Class 对象,然后通过 getDeclaredMethods() 方法获取了 String 类的所有方法,并且打印了这些方法的名称。接着我们动态地调用了 String 类的 toUpperCase() 方法,并且打印了方法的返回结果。

需要注意的是,在使用反射时需要处理异常,否则程序可能会崩溃。同时,反射的使用也会带来一定的性能损失,因此在实际开发中需要谨慎使用。