java反射调用方法

java反射调用方法

先上代码

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class Test {

    public Test(String a) {

    }

    public Test() {

    }


    public void say(String str1, String str2) {
        System.out.println(str1 + " " + str2);
    }

    public static void main(String[] args) throws ClassNotFoundException {
        Class classType = Class.forName("Test");
        Method[] methods = classType.getMethods();
        for (Method method : methods) {
            method.setAccessible(true);
            System.out.println(method.getName());
            if (method.getName().equals("say")) {
                try {
                    method.invoke(classType.newInstance(), new Object[]{"a", "b"});
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                } catch (InvocationTargetException e) {
                    e.printStackTrace();
                } catch (InstantiationException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

结果:

main
say
a b
wait
wait
wait
equals
toString
hashCode
getClass
notify
notifyAll

在结果中可以看到打印了所有方法名称,其中第三行是我调用say方法的输出结果

步骤

  • 先获取我们要反射的对象类型
  • 获取对象的所有方法
  • 执行method.invoke() 其中第一个参数是被反射对象的实例化,如果对象有一个参数构造方法,则必须写一个无参的构造方法,如没有构造方法,默认是一个无参构造方法,第二个参数是我们要invoke方法的参数,因为在代码中我想调用的是say,这个方法有两个参数,所以我传入了一个两个String的数组。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值