java 用反射调用类里的方法

这篇博客展示了如何使用Java反射API来调用类的方法,包括静态方法、实例方法和无参数方法。示例中创建了一个Calculator类,并在CalculatorTest类中通过反射调用了mul、add和print方法,演示了不同类型的函数调用方式。
摘要由CSDN通过智能技术生成

1、编写一个 Java 类

public class Calculator{ 
     
    public double add(double score1,double score2){
        return score1 + score2;
    }
     
    public void print(){
        System.out.println("OK");
    }
     
    public static double mul(double score1,double score2){
        return score1 * score2;
    }
}

2、通过 反射 调用类里面的方法

public class CalculatorTest {
 
    public static void main(String[] args) throws Exception {
        //通过类的.class属性获取
        Class<Calculator> clz = Calculator.class;
        //或者通过类的完整路径获取,这个方法由于不能确定传入的路径是否正确,这个方法会抛ClassNotFoundException
//      Class<Calculator> clz = Class.forName("test.Calculator");
        //或者new一个实例,然后通过实例的getClass()方法获取
//      Calculator s = new Calculator();
//      Class<Calculator> clz = s.getClass();

        //1. 获取类中带有方法签名的mul方法,getMethod第一个参数为方法名,第二个参数为mul的参数类型数组
        Method method = clz.getMethod("mul", new Class[]{double.class,double.class});
        //invoke 方法的第一个参数是被调用的对象,这里是静态方法故为null,第二个参数为给将被调用的方法传入的参数
        Object result = method.invoke(null, new Object[]{2.0,2.5});
        //如果方法mul是私有的private方法,按照上面的方法去调用则会产生异常NoSuchMethodException,这时必须改变其访问属性
        //method.setAccessible(true);//私有的方法通过发射可以修改其访问权限
        System.out.println(result);//结果为5.0
        
        //2. 获取类中的非静态方法
        Method method_2 = clz.getMethod("add", new Class[]{double.class,double.class});
        //这是实例方法必须在一个对象上执行
        Object result_2 = method_2.invoke(new Calculator(), new Object[]{2.0,2.5});
        System.out.println(result_2);//4.5
        
        //3. 获取没有方法签名的方法print
        Method method_3 = clz.getMethod("print", new Class[]{});
        Object result_3 = method_3.invoke(new Calculator(), null);//result_3为null,该方法不返回结果    
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值