敖云岚 2025-05-28 19:14 采纳率: 0%
浏览 16

Java 的反射常用的方法的理解


public class ReflectionDemo {
    public static void main(String[] args) {
        try{
            // 根据传入的类名字符串加载类,返回指定的 Class 类对象
            Class c = Class.forName(args[0]);
            // getDeclaredMethods():获取该类中的所有声明的方法,包括private!
            Method[] m = c.getDeclaredMethods();
            for (int i = 0; i < m.length; i++) {
                // 输出方法的完整签名
                System.out.println(m[i].toString());
                // 判断是否为 private
                System.out.println(Modifier.isPrivate(m[i].getModifiers()));
            }
        }catch (Throwable e){
            System.out.println(e);
        }
    }
}

对 Java 反射的理解

  • 写回答

6条回答 默认 最新

  • 阿里嘎多学长 2025-05-28 19:14
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    Java 反射常用的方法的理解

    Java 反射机制提供了很多有用的方法,可以帮助我们在运行时获取和操作类、对象、方法、字段等信息。下面是一些常用的反射方法:

    1. Class 类:Class 类提供了获取类信息的方法,例如:
    Class<?> clazz = Class.forName("java.lang.String");
    
    1. newInstance() 方法:可以使用 newInstance() 方法创建对象实例:
    Class<?> clazz = Class.forName("java.lang.String");
    String obj = (String) clazz.newInstance();
    
    1. getMethod() 方法:可以使用 getMethod() 方法获取方法对象:
    Class<?> clazz = Class.forName("java.lang.String");
    Method method = clazz.getMethod("length");
    
    1. getDeclaredMethod() 方法:可以使用 getDeclaredMethod() 方法获取私有方法对象:
    Class<?> clazz = Class.forName("java.lang.String");
    Method method = clazz.getDeclaredMethod("intern");
    
    1. getField() 方法:可以使用 getField() 方法获取字段对象:
    Class<?> clazz = Class.forName("java.lang.String");
    Field field = clazz.getField("value");
    
    1. getDeclaredField() 方法:可以使用 getDeclaredField() 方法获取私有字段对象:
    Class<?> clazz = Class.forName("java.lang.String");
    Field field = clazz.getDeclaredField("hash");
    
    1. invoke() 方法:可以使用 invoke() 方法调用方法:
    Class<?> clazz = Class.forName("java.lang.String");
    Method method = clazz.getMethod("length");
    String obj = (String) method.invoke(null);
    
    1. set() 方法:可以使用 set() 方法设置字段值:
    Class<?> clazz = Class.forName("java.lang.String");
    Field field = clazz.getField("value");
    field.set(null, "hello");
    

    这些方法可以帮助我们在运行时获取和操作类、对象、方法、字段等信息,从而实现更加灵活和动态的编程。

    评论

报告相同问题?

问题事件

  • 创建了问题 5月28日