java中的反射

java中的反射

import java.lang.reflect.Field;
import java.lang.reflect.Method;

class MyClass {
    private int num;

    public MyClass() {
        this.num = 0;
    }

    public void setNum(int num) {
        this.num = num;
    }

    public int getNum() {
        return num;
    }

    public void display() {
        System.out.println("Value: " + num);
    }
}

public class ReflectionExample {
    public static void main(String[] args) throws Exception {
        // 动态创建对象
        Class<?> myClass = Class.forName("MyClass");
        MyClass obj = (MyClass) myClass.getDeclaredConstructor().newInstance();

        // 获取并调用方法
        Method setNumMethod = myClass.getDeclaredMethod("setNum", int.class);
        setNumMethod.invoke(obj, 42); // 调用 setNum 方法设置字段值

        // 获取并设置字段值
        Field numField = myClass.getDeclaredField("num");
        numField.setAccessible(true); // 设置私有字段可访问
        int value = (int) numField.get(obj); // 获取字段值
        System.out.println("Value: " + value);

        // 调用对象的方法
        Method displayMethod = myClass.getDeclaredMethod("display");
        displayMethod.invoke(obj); // 调用 display 方法
    }
}

这个例子中,首先使用Class.forName()方法动态加载了类MyClass,然后使用getDeclaredConstructor().newInstance()方法动态创建了类的对象。接着,使用getDeclaredMethod()方法获取了setNum方法和display方法,并通过invoke()方法动态地调用了这两个方法。最后,使用getDeclaredField()方法获取了类的私有字段num,并通过setAccessible(true)方法设置为可访问,然后使用get()方法获取字段值,再次使用invoke()方法调用了display方法。

这个例子演示了反射机制的基本用法,但请注意,反射机制的使用应谨慎,因为它会增加代码的复杂性和运行时的性能开销。


枚举,泛型
设计模式。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值