本篇博客介绍的是 通过反射操作方法:
我们先创建一个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();
}
}
}