先看看别人的一篇文章
基本概念可以参考上面那篇文章,这里不多少,直接上代码,撸起。
package reflact_demo;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
/**
* ClassUtil.java 封装一些反射的操作
* Created by Administrator on 2017/1/5.
*/
public class ClassUtil {
/**
* 打印类的信息,包括类的成员函数、成员变量(只获取成员函数)
*/
public static void printClassMethodMessage(Object obj){
Class c = obj.getClass();
System.out.println("类的名称是:" + c.getName());
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[] paramTypes = ms[i].getParameterTypes();
for (Class c1:paramTypes) {
System.out.print(c1.getName()+",");
}
System.out.println(")");
}
}
/**
* 获取成员变量的信息
*/
public static void printFieldMessage(Object obj){
Class c = obj.getClass();
/*
* 成员变量也是对象
* java.lang.reflect.Field
* Field类封装了关于成员变量的操作
* getFields()方法获取的是所有的public的成员变量的信息
* getDeclaredFields获取的是该类自己声明的成员变量的信息
*/
Field[] fs = c.getDeclaredFields();
for (Field f : fs) {
//得到成员变量的类型的类类型
Class fieldType = f.getType();
String typeName = fieldType.getName();
//得到成员变量的名称
String fieldName = f.getName();
System.out.println(typeName + " " + fieldName);
}
}
/**
* 打印对象的构造函数信息
*/
public static void printConMessage(Object obj){
Class c = obj.getClass();
/*
* 构造函数也是对象
* java.lang. Constructor中封装了构造函数的信息
* getConstructors获取所有的public的构造函数
* getDeclaredConstructors得到所有的构造函数
*/
Constructor[] cs = c.getDeclaredConstructors();
for ( Constructor con : cs ) {
System.out.println("构造函数:");
System.out.print(con.getName()+"(");
//获取构造函数的参数列表--->得到的是参数列表的类类型
Class[] paramTypes = con.getParameterTypes();
for (Class c1 : paramTypes ) {
System.out.print(c1.getName() + ",");
}
System.out.println(")");
}
}
}
写个方法测试一下
package reflact_demo;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.lang.reflect.Method;
/**
* MethodDemo.java
* Created by Administrator on 2017/1/5.
*/
public class MethodDemo {
private static UserService us = new UserService();
public static void main(String[] args){
ClassUtil.printClassMethodMessage(MethodDemo.class);
//ClassUtil.printFieldMessage(MethodDemo.class);
// ClassUtil.printConMessage(MethodDemo.class);
}
}
//UserService.class
public class UserService {
public void delete(){
System.out.println("删除用户");
}
public void update(){
System.out.println("修改用户");
}
public void find(){
System.out.println("查找用户");
}
}
其中一个方法测试结果: