public static void getFieldsInfo(Field[] fields){
for(Field f:fields){
//打印修饰符
int mo = f.getModifiers();
System.out.print(Modifier.toString(mo));
//打印方法类型
System.out.print(" "+f.getType());
//打印变量名称
System.out.println(" "+f.getName());
}
}
2.//获取构造函数信息
public static void getConstructInfo(
@SuppressWarnings("rawtypes") Constructor[] cons) {
System.out.println("构造函数");
for (Constructor<?> con : cons) {
// 打印修饰符
int mo = con.getModifiers();
System.out.print(Modifier.toString(mo));
// 打印构造函数名
System.out.print(" " + con.getName());
// 获取参数;
getParmsInfo(con.getParameterTypes());
System.out.println();
}
}
3.//获取方法信息
public static void getMethodsInfo(Method[] method) {
for (Method mt : method) {
int m = mt.getModifiers();
// 修饰符
System.out.print(Modifier.toString(m) + " ");
// 获取返回类型
System.out.print(mt.getReturnType());
System.out.print(" " + mt.getName());
getParmsInfo(mt.getParameterTypes());
}
}
4.//获取方法参数信息
public static void getParmsInfo(@SuppressWarnings("rawtypes") Class[] parm) {
System.out.print(" (");
for (Class<?> c : parm) {
System.out.print(c.getName() + " ");
}
System.out.print(")");
System.out.println();
}
5.//获取内部类信息
public static void getInerclassInfo(
@SuppressWarnings("rawtypes") Class[] innerClass) {
System.out.println("内部类");
for (@SuppressWarnings("rawtypes")
Class c : innerClass) {
System.out.println(c.getName() + "{");
getMethodsInfo(c.getDeclaredMethods());
System.out.println("}");
}
}
******测试*******
public class Apple{
public int eat(int i,int j){
System.out.println("总共"+total+"个苹果,吃了"+i+"个苹果");
}
public static void main(String[] args) {
Apple apple = null;
try {
//只有当类存在默认的构造方法时才能用newInstance()获得对象
apple = (Apple) Class.forName("com.cn.hkl.reflect.Apple")
.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
getMethodsInfo(apple.getClass().getMethods());
getConstructInfo(apple.getClass().getConstructors());
getFieldsInfo(apple.getClass().getFields());
//动态调用方法
try {
Method c =apple.getClass().getMethod("eat",int.class,int.class);
c.invoke(apple,5,2);
} catch (NoSuchMethodException | SecurityException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}