反射——操作方法

本篇博客介绍的是 通过反射操作方法:
我们先创建一个vo类:

public class Student{
	public void eat(String name){
		System.out.println(name+"正在吃...");
	}
	private void eat(){
		System.out.println("正在吃饭...");
	}
}

接着我们写一个测试类Test来通过反射实现操作方法

public class Test{
	public static void main(String[] args){
		Class clazz = Student.class;
 		try{
 			//获取方法
 			//通过方法名与参数列表 获取public方法
 			Method method = clazz.getMethod("eat", String.class);
 			//可以获取继承来的方法
   			method = clazz.getMethod("toString");
   			//获取 全部访问级别 的方法
   			method = clazz.getDeclaredMethod("eat");
			//获取 public访问级别 的所有方法
   			Method[] methods = clazz.getMethods();
   			//获取 全部访问级别 的所有方法,不包含继承的方法
   			methods = clazz.getDeclaredMethods();

			//查看方法:
			//先获取这个方法
			method = clazz.getMethod("eat", String.class);
			//查看该方法所属的类
			clazz = method.getDeclaringClass();
   			System.out.println(clazz);
   			//查看该方法的访问权限
   			int mod = method.getModifiers();
  		 	String result = Modifier.toString(mod);
   			System.out.println(result);
   			//查看该方法的返回值类型,这里返回值类型的类为Class类型
   			clazz = method.getReturnType();//返回值类型
   			System.out.println(clazz);
   			//查看方法名
   			method.getName();
   			//查看该方法的参数列表类型
   			clazz = method.getParameterTypes();
   			System.out.println(clazz);
   			
   			//调用方法:
   			Constructor constructor = clazz.getConstructor();
   			Object obj = constructor.newInstance();//通过反射调用构造方法,创建对象
   			obj = method.invoke(obj, "Tom");//调用,前面传调用该方法的对象,后面传参数(反射中方法不区分静态非静态,全当非静态),该方法返回值为调用方法返回值
   			System.out.println(obj);
 		} catch (Exception e) {
			e.printStackTrace();
    		}
 
		
	}
}
发布了101 篇原创文章 · 获赞 3 · 访问量 2250

猜你喜欢

转载自blog.csdn.net/S_Tian/article/details/103878780