如果操作类中的方法;
Class类中的方法
Method a=getMethod("方法名",Class...参数类型);
Method[]=getMethods(); //获取所有的方法(公有的 自己类+父类)
Method=getDeclaredMethod("方法名字",参数类型的class..);//获取一个方法
Method[] =getDeclaredMethods();获取全部方法 (公有的 自己类+父类)
Class类中的构造方法
Constructor c=getConstructor(Class...参数类型)
Method类中的常用
int mm=a.getModifiers();//获取方法的修饰符(权限+特征)
Class mrt=a.getReturnType();//获取返回值数据类型
String mn=a.getName();//获取方法的名字
Class[] mpts=a.getParameterTypes();//获取方法参数列表的类型
Class[] mets=a.getExceptionTypes();//获取方法抛出异常的类型
如何操作方法
调用方法 让他执行一次
Object r=invoke(对象,执行方法需要传递的所有参数..);
若方法是私有的,不允许操作
可以设置setAccessible(true);
Constructor类中的常用方法;
getModifiers();//获取方法的修饰符(权限+特征)
getName();//获取方法的名字
Class[] =getParameterTypes();//获取方法参数列表的类型
getExceptionTypes();
如何操作构造方法
执行一次 创建对象
Object=newInstance(执行构造方法时的所有参数);
package test0606;
public class Animal{
public String names;
private int ages;
public void sleep(){
System.out.println("睡觉");
}
}
package test0606;
public class Person extends Animal{
public String name;
private int age;
Public Person(){
}
public String toString(){
return "{name:"+name+","+"age:"+age+"}";
}
public void eat(){
System.out.println("无参数吃饭");
}
public String eat(String n){
System.out.println(n+"参数吃饭");
return n;
}
private void drink(){
System.out.println("参数吃饭");
}
}
package test0606;
import java.lang.reflect.*;
@SuppressWarnings("unchecked")
public class TestMain{
public static void main(String[] args){
try{
Class a=Person.class;
Person p=(Person)a.newInstance();
//先通过方法名字定位方法 通过方法参数类型对应的Class来找寻
Method m=a.getMethod("eat",String.class);
String rs=(String)m.invoke(p,"abd");
System.out.println(rs);
Method ma=a.getMethod("sleep");
ma.invoke(p);
Method[] ms=a.getMethods();//获取所有公有的方法(自己类+父类);
Method mma=a.getDeclaredMethod("drink");
System.out.println(mma.getName());
mma.setAccessible(true);
mma.invoke(p);
/*
Method m=a.getMethod("eat");
int mf=m.getModifiers();//获取方法的修饰符
Class mrt=m.getReturnType();//获取返回值数据类型
String mn=m.getName();//获取方法的名字
Class[] mpts=m.getParameterTypes();//获取方法参数列表的类型
Class[] mets=m.getExceptionTypes();//获取方法抛出异常的类型;
*/
}catch(Exception e){
e.printStackTrace();
}
}
}
原文:https://www.cnblogs.com/canglongdao/p/13055386.html