有Student类:
package testreflection; public class Student{ private static int count; private String stuNum; public Student(String stuNum) { // TODO Auto-generated constructor stub this.stuNum = stuNum; count++; } public String getStuNum() { return stuNum; } public void setStuNum(String stuNum) { this.stuNum = stuNum; } public static int getCount() { return count; } }
利用反射来调用Student类的方法的测试代码如下:
package testreflection; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class TestMethod { public static void main(String[] args) { // TODO Auto-generated method stub try { Student student = new Student("20101120244"); /** * getMethod的方法签名如下: * getMethod(String name, Class<?>... parameterTypes), * 第一个参数是方法名,接下来的参数是要调用的方法的参数列表各类型 * 对应的Class对象 */ Method m1 = student.getClass().getMethod("getStuNum"); /** * invoke的方法签名如下: * invoke(Object obj, Object... args), * 第一个参数是方法所属的对象,如果是静态方法,设置为null, * 接下来的参数是要传递给要调用的方法的参数 */ System.out.println(m1.invoke(student)); Method m2 = student.getClass().getMethod("setStuNum", String.class); m2.invoke(student, "20121120064"); System.out.println(m1.invoke(student)); Method m3 = Student.class.getMethod("getCount"); System.out.println(m3.invoke(null)); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
运行结果如下:
20101120244
20121120064
1
值得一提的是,我没能利用反射访问到类的私有方法,这一句
setAccessible(true);
也不好用。
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-22 00:59:28