Java 类的反射应用

分类:N07_Java

标签:

public class SomeClass {
    private String name;
    
    public SomeClass(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    @Override
    public String toString() {
        return "SomeClass{name='" + name + "'}";
    }
}


import java.lang.reflect.*;

public class ClassInfoExample {
    public static void main(String[] args) {
        // 获取 SomeClass 类的 Class 对象
        Class<?> clazz = SomeClass.class;
        
        // 获取类名
        System.out.println("Class name: " + clazz.getName()); // 输出 "SomeClass"

        // 获取类的构造方法
        try {
            Constructor<?> constructor = clazz.getConstructor(String.class);
            System.out.println("Constructor: " + constructor);

            // 创建类的实例
            Object instance = constructor.newInstance("John");
            System.out.println("Instance: " + instance); // 输出 "SomeClass{name='John'}"
        } catch (Exception e) {
            e.printStackTrace();
        }

        // 获取类的方法
        try {
            Method method = clazz.getMethod("getName");
            System.out.println("Method: " + method);

            // 调用方法
            String result = (String) method.invoke(instance);
            System.out.println("Result from method: " + result); // 输出 "John"
        } catch (Exception e) {
            e.printStackTrace();
        }

        // 获取类的字段
        try {
            Field field = clazz.getDeclaredField("name");
            field.setAccessible(true);  // 允许访问 private 字段
            System.out.println("Field: " + field);

            // 获取字段值
            String fieldValue = (String) field.get(instance);
            System.out.println("Field value: " + fieldValue); // 输出 "John"
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}


修改内容