自己写的一个利用反射实现的类分析器,初学者可以通过这个程序学习java的反射机制
package dwr.test.helloworld;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
/**
* @author Ericzhou
*/
public class StringClassTester {
public static void main(String[] args) {
ClassTester(java.lang.String.class);
}
public static void ClassTester(Class c) {
// 获取属性的数组
Field[] fields = c.getFields();
System.out.println("得到属性" + fields.length + "个");
System.out.println("=========================");
for (int i = 0; i < fields.length; i++) {
Field f = fields[i];
System.out.println((i + 1) + ". " + Modifier.toString(f.getModifiers()) + " "
+ toType(f.getType()) + " " + f.getName());
}
// 属性分析完毕
// 开始分析方法
Method[] ms = c.getMethods();
System.out.println("=========================");
System.out.println("得到方法" + ms.length + "个");
System.out.println("=========================");
for (int i = 0; i < ms.length; i++) {
Method m = ms[i];
System.out.print((i + 1) + ". " + Modifier.toString(m.getModifiers()) + " "
+ toType(m.getReturnType()) + " " + m.getName() + "(");
// 输出参数列表
Class[] pc = m.getParameterTypes();
for (int j = 0; j < pc.length; j++) {
System.out.print(toType(pc[j]) + " arg" + j);
if (j != (pc.length - 1)) {
System.out.print(",");
}
}
System.out.println(");");
}
}
/**
*
* 辅助函数,获取非精确类型
* @param type
* @return
*/
private static String toType(Class type) {
String name = type.getName();
String[] str = name.split("\\.");
int len = str.length;
if (len == 0) {
return name;
} else {
return str[len - 1];
}
}
}