java体现反射的简单示例

发布时间:2024年01月07日

java体现反射的简单示例

下面这个示例展示了反射的多个特点,包括动态获取类信息、动态创建对象、动态调用方法和访问字段等。请注意,为了简化示例,省略了异常处理和其他细节。

1.定义一个 Dog 类:
class Dog {
    private String name;

    public Dog() {}

    public Dog(String name) {
        this.name = name;
    }

    public void doSomething() {
        System.out.println(name + ": 2024旺旺旺...");
    }

    public String toString() {
        return "你好!我是" + name;
    }
}
2.反射调用示例代码:
public class ReflectExample {
    public static void main(String[] args) throws Exception {
        // 获取类的信息
        Class<?> clazz = Dog.class;
        String className = clazz.getSimpleName();
        int modifiers = clazz.getModifiers();
        Package pkg = clazz.getPackage();
        System.out.println("Class Name: " + className); // 类名
        System.out.println("Modifiers: " + Modifier.toString(modifiers));   //  类修饰符
        System.out.println("Package: " + pkg.getName());    // 包名

        // 通过无参构造创建对象实例
        Object instance = clazz.newInstance();

        // 获取构造函数并创建对象
        Constructor<?> constructor = clazz.getConstructor(String.class);
        instance = constructor.newInstance("旺财");

        // 获取和调用方法
        Method method = clazz.getMethod("doSomething");
        method.invoke(instance);

        // 获取和设置字段的值
        Field field = clazz.getDeclaredField("name");
        field.setAccessible(true);
        Object value = field.get(instance);
        System.out.println("Field Value: " + value); // Field Value: 旺财
        field.set(instance, "旺财2");
        System.out.println(instance);   //你好!我是旺财2

        // 获取Deprecated类的注解,判断是否废弃
        Annotation annotation = clazz.getAnnotation(Deprecated.class);
        System.out.println("Is Deprecated: " + (annotation != null));
    }
}
3.执行结果:
Class Name: Dog
Modifiers: 
Package: com.xxx.abcd
旺财: 2024旺旺旺...
Field Value: 旺财
你好!我是旺财2
Is Deprecated: false

Process finished with exit code 0

这个示例中,我们定义了一个 Dog 类,它具有私有字段 name 和两个方法 doSomething() 和 toString() 。在 ReflectExample 类中,我们使用反射来获取类的信息、创建对象实例、获取和调用方法、获取和设置字段的值,以及获取类的注解。

文章来源:https://blog.csdn.net/qq_36382892/article/details/135418009
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。