通过JAVA反射调用类的方法_Java中通过反射调用类中的方法

本文详细介绍了Java中如何通过反射调用类中的方法,包括获取Class对象、实例化对象、获取方法以及使用invoke调用方法的四个步骤。通过示例展示了调用无参数和带参数方法的完整过程。

Java中通过反射调用类中的方法,具体实现起来要注意两点:

(1)通过 Class 类的 getMethod 方法取的 Method 对象,并设置调用方法时需要的参数类型。

(2)使用 Method 方法调用 invoke 方法,并向该方法传递参数,其参数通常是一个类的对象。

个人总结,大致需要以下四个步骤:

1. 获取当前类的Class对象。              (通过forName()动态加载类)

2. 实例化这个Class对象。                (通过newInstance:  Object obj=student.newInstance() )

3. 获取当前类的某个(些)方法

4用  方法对象名.invoke ,通过Class对象的实例,调用带相应参数的,当前类的方法。

代码如下:

******************学生类****************

类里面有两个方法,一个带参数,一个不带参数

package zj4_6;

import java.lang.reflect.InvocationTargetException;

public class Student {

public void printInfo(){

System.out.println("打印学生信息");

}

public void printAddress(String address){

System.out.println("hellow,I come from "+address);

}

}

***********************主函数类***************************

调用Student类中的两个方法

package zj4_6;

import java.lang.reflect.InvocationTargetException;

import java.lang.reflect.Method;

public class InvokeMethod1 {

/**

* 通过反射,调用类中的方法

* @throws SecurityException

* @throws NoSuchMethodException

* @throws InstantiationException

* @throws InvocationTargetException

* @throws IllegalArgumentException

* @throws IllegalAccessException

*/

public static void main(String[] args) throws Exception {

try {

Class student=Class.forName("zj4_6.Student");//动态加载类,获取当前类的Class对象

//获取Student类名称为printinfo地方法

Method methods1=student.getMethod("printInfo");

//调用frintInfo方法

methods1.invoke(student.newInstance()); //通过实例化的对象,调用无参数的方法

//获取类中名称为printInfo地方法,String,class是参数类型

Method methods2=student.getMethod("printAddress", String.class);//注意参数不是String

//调用printAddress方法,其中HK是方法传入的参数值

methods2.invoke(student.newInstance(),"HK");//通过对象,调用有参数的方法

} catch (ClassNotFoundException e) { 29  e.printStackTrace(); 30  } 31  } 32 }

运行结果如下:

be985aa777cbdb53ce1205c6accbb53c.png

0b1331709591d260c1c78e86d0c51c18.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值