反射:获取类中的方法

来源:互联网 发布:能装windows的平板 编辑:程序博客网 时间:2024/06/11 01:21

1.使用反射获取类中的方法

1):获取方法所在类的字节码对象.
2):获取方法.
------------------------------------------------------------------------
Class类中常用方法:
public Method[] getMethods():获取包括自身和继承过来所有public方法
public Method[] getDeclaredMethods():获取自身类中所有的方法(不包括继承的,和访问权限无关)

public Method getMethod(String methodName,Class<?>... parameterTypes):表示调用指定的一个公共的方法(包括继承的)
       参数:
               methodName: 表示被调用方法的名字
               parameterTypes:表示被调用方法的参数的Class类型如String.class

public Method getDeclaredMethod(String name,Class<?>... parameterTypes):表示调用指定的一个本类中的方法(不包括继承的)
        参数:
               methodName: 表示被调用方法的名字

               parameterTypes:表示被调用方法的参数的Class类型如String.class


User类

public class User {public void doWork() {}public static void doWork(String name) {}private String sayHello(String name, int age) {return name + "," + age;}}
测试:

import java.lang.reflect.Method;import org.junit.Test;public class GetMethodDemo {//获取User中指定的方法@Testpublic void getOne() throws Exception {Class<User> userClass = User.class;//获取doWork()Method method1 = userClass.getMethod("doWork");System.out.println(method1);//public void _04getMethod.User.doWork()//获取doWork(String name)Method method2 = userClass.getMethod("doWork", String.class);System.out.println(method2);//public static void _04getMethod.User.doWork(java.lang.String)//获取private sayHello(String name, int age)Method method3 = userClass.getDeclaredMethod("sayHello", String.class,int.class);System.out.println(method3);//private java.lang.String _04getMethod.User.sayHello(java.lang.String,int)}//获取User中所有的方法@Testpublic void getAll(){Class<User> userClass = User.class;//获取包含继承父类的所有公共方法Method[] methods1 = userClass.getMethods();for (Method method : methods1) {System.out.println(method);/** * 打印结果:全是公共的方法,包括自己的和父类的 * public void _04getMethod.User.doWork()public static void _04getMethod.User.doWork(java.lang.String)public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedExceptionpublic final native void java.lang.Object.wait(long) throws java.lang.InterruptedExceptionpublic final void java.lang.Object.wait() throws java.lang.InterruptedExceptionpublic boolean java.lang.Object.equals(java.lang.Object)public java.lang.String java.lang.Object.toString()public native int java.lang.Object.hashCode()public final native java.lang.Class java.lang.Object.getClass()public final native void java.lang.Object.notify()public final native void java.lang.Object.notifyAll() */}System.out.println("================================");//获取自己本类的所有方法Method[] methods2 = userClass.getDeclaredMethods();for (Method method : methods2) {System.out.println(method);/** * 打印结果:只是自己本类中的所有方法,包括私有的 * private java.lang.String _04getMethod.User.sayHello(java.lang.String,int)public void _04getMethod.User.doWork()public static void _04getMethod.User.doWork(java.lang.String) */}}}


阅读全文
0 0