您的位置:首页 > 编程语言 > Java开发

使用Java的反射功能调用类中的方法

2014-11-05 10:57 417 查看
最近一直在搞Java的反射,今天使用反射调用方法时出现了很多问题,主要是没有详细参考官方API。所以走了很多弯路。

所以想把这个例子记下来,供自己也供他人学习。

package com.mine.practice.reflect;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
* 使用反射调用类中的方法
* @author  2014-11-5 上午10:51:28
* @version V1.0
* @modify by user: {修改人} 2014-11-5
* @modify by reason:{方法名}:{原因}
*/
public class User{

/**用户名*/
String name;

@SuppressWarnings("unused")
public static void main(String[] args) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException{

//1、实例化对象
User user = new User();

//2、方法中需要的参数列表。单个参数时也可以直接使用String params = "Tom";
String[] params = new String[]{"Tom"};

//3.1需要参数的方法
//第一个参数为方法的名字,第二个参数为方法参数的类型,单个参数时也可以直接写XXX.class或者写成数组的形式也可以。
Method setMethod = (User.class).getMethod("setName",new Class[]{String.class});

//调用setName方法,因为没有返回值,所以可以不用使用对象接收,如果接收了返回的也是null
setMethod.invoke(user,params);

//3.2不需要参数的方法
//第一个参数为方法的名字,因为没有参数,所以只需要一个参数即可。
Method getMethod = (User.class).getMethod("getName");

//调用getName方法,因为有返回值,所以可以定义一个Object接收返回值。
//注意invoke中的类即下面的user必须实例化,否则会抛出下面的异常的
//java.lang.IllegalArgumentException: object is not an instance of declaring class

Object object = getMethod.invoke(user);

//打印使用反射方式获取方法的返回值
System.out.println(object);

}

public void setName(String name) {
this.name = name;
}

public String getName(){
return name;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: