这里,已经写好了几个方法通过反射获取信息。
/**
* 获取类的方法名,参数列表信息
* @param obj对象所属类的信息
*/
public static void printMethodMessage(Object obj){
//获取类类型
Class c=obj.getClass(); //传递的是哪个子类,c就是该子类的类类型
System.out.println("名称:"+c.getName());
//methpd 类 一个成员方法就是一个Method对象
//getMethods()获取所有public函数,包括父类继承
//getDeclaredMethods()类自己声明函数,不问访问权限
Method [] ms=c.getMethods();
for (int i = 0; i < ms.length; i++) {
Class returnType=ms[i].getReturnType();
System.out.print(returnType.getName()+" ");
System.out.print(ms[i].getName()+"(");
//获取参数类型,得到的是参数列表类型的类类型
Class [] paramType=ms[i].getParameterTypes();
for (Class class1 : paramType) {
System.out.print(class1.getName()+",");
}
System.out.println(")");
}
System.out.println("--------------------------");
}
/**
* 获取成员变量类型和名称
* @param obj
*/
public static void printFieldMessage(Object obj) {
Class c=obj.getClass();
Field [] fs=c.getDeclaredFields();
for (Field field : fs) {
//得到成员变量类型 的类类型
Class fieldType=field.getType();
//成员类型名称
String name=fieldType.getName();
//成员变量名称
String fieldName=field.getName();
System.out.println(name+","+fieldName);
}
}
/**
* 获取构造函数信息
* @param obj
*/
public static void printConstructorMessage(Object obj){
Class c=obj.getClass();
//getConstructors() 获取所有public 的构造函数
// Constructor [] cs=c.getConstructors();
//getDeclaredConstructors() 不管访问权限
Constructor [] cs=c.getDeclaredConstructors();
for (Constructor con : cs) {
//获取名字
System.out.print(con.getName()+"(");
//获取参数列表
Class [] paramType=con.getParameterTypes();
for (Class class1 : paramType) {
System.out.print(class1.getName()+",");
}
System.out.println(")");
}
}
还有通过类的方法,查找类的方法,参数列表信息:
package cn.demo1;
import java.lang.reflect.Method;
public class MethodDemo1 {
public static void main(String[] args) {
// 获取方法:
Test test = new Test();
Class c1 = test.getClass();
try {
// c1.getDeclaredMethod("print", new Class[]{int.class,int.class});
Method m = c1.getMethod("print", int.class, int.class);
// 方法反射操作,m进行调用,null表示没有返回值
Object o = m.invoke(test, new Object[] { 10, 30 });
Object o1 = m.invoke(test, 10, 40);
System.out.println("==============");
Method m1 = c1.getMethod("print", String.class, String.class);
Object o2 = m1.invoke(test, "das", "dsasdew");
System.out.println("==============");
Method m2 = c1.getMethod("print");
o2 = m2.invoke(test);
} catch (Exception e) {
e.printStackTrace();
}
}
}
class Test {
public void print() {
System.out.println("fdaadsssssss");
}
public void print(int a, int b) {
System.out.println(a + b);
}
public void print(String a, String b) {
System.out.println(a.toUpperCase() + "," + b.toUpperCase());
}
}
多看看api,其实也不是太难。一天一个知识点。就到这里了。