反射获取类基本结构信息

1、获取包名称

Class clazz = Person.class;
// 获取包对象
Package p = clazz.getPackage();
// 获取包名称
String packageName = p.getName();

2、获取父类class对象

Class clazz = Person.class;
Class superClazz = clazz.getSuperclass();

3、获取实现的接口的class对象

Class clazz = Person.class;
// 获取类实现的接口class对象
Class[] clazzInterfaces = clazz.getInterfaces();

4、获取构造器及实例化

Class clazz = Person.class;
// 获取本类所有构造器
Constructor[] declaredConstructors = clazz.getDeclaredConstructors();
// 获取所有(包括父类)public构造器
Constructor[] constructors = clazz.getConstructors();
// 获取本类指定参数的构造器
Constructor specifiedConstructor = clazz.getDeclaredConstructor(String.class);
// 有参构造的实例化
Object instance = specifiedConstructor.newInstance("hellow");

5、获取方法及方法调用

Class clazz = Person.class;
// 获取本类所有方法
Method[] declaredMethods = clazz.getDeclaredMethods();
// 获取所有(包括父类)public方法
Method[] methods = clazz.getMethods();
// 获取本类指定名称的方法
Method method = clazz.getDeclaredMethod("setName");
// 调用方法,需要实例化对象
Object obj = clazz.getDeclaredConstructors().newInstance();
method.invoke(obj, "hellow");

// 获取方法名称
String name = method.getName();
// 获取修饰符
int mod = method.getModifiers();
String modName = Modifier.toString(mod);
// 获取返回类型
Class returnType = method.getReturnType();
// 获取参数类型
Class[] parameterTypes = method.getParameterTypes();
// 获取异常
Class[] exceptionTypes = method.getExceptionTypes();

6、调用类成员

Class clazz = Person.class;
Object obj = clazz.getDeclaredConstructor().newInstance();
// 获取本类所有成员
Field[] declaredFields = clazz.getDeclaredFields();
// 获取所有(包括父类)public成员
Field[] fields = clazz.getFields();
// 获取本类指定成员
Field field = clazz.getDeclaredField("name");
// 获取成员属性值,需要实例化对象
// 若成员修饰符不为public,需要解除封装field.setAccessible(true);
Object value = field.get(obj);
// 获取成员类型
Class type = field.getType();
// 获取类型完整名称,如:java.lang.String
type.getName();
// 获取类型简单名称,如:String
type.getSimpleName();

 

你可能感兴趣的:(反射获取类基本结构信息)