反射:获取类中的方法

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中指定的方法
	@Test
	public 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中所有的方法
	@Test
	public 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.InterruptedException
				public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
				public final void java.lang.Object.wait() throws java.lang.InterruptedException
				public 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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值