一、java反射之基本类周边信息获取
总结:
1、获取类类型对象的集中方式
Person per = new Person();
Class<?> a = per.getClass();//方法一
Class<?> b = Person.class;//方法二
Class<?> c = Class.forName(String Classname);//方法三(推荐使用)
Class<?> d = context.getClassLoader().loadClass(String Classname);//方法四(不建议使用)
2、获取包名类名
public String getName();//获取完整的类名(包名.类名)
public String getSimpleName();//仅获取类名
public Package getPackage();//获取类类型所对应得package对象
3、获取超类Class对象
public Class<?> getSuperclass();//获取普通函数的父类Class对象
public Type getGenericSuperclass();//针对范型父类而设计
4、获取接口Class对象
public Class<?>[] getInterfaces();//获取普通接口的方法
public Type[] getGenericInterfaces();//获取范型接口的方法
5、类访问修饰符
int modifiers = class.getModifiers();//获取类访问修饰符对应的int变量
String Modifier.toString(int modifiers);//根据整形变量来生成对应的修饰符字符串
boolean Modifier.isAbstract(int modifiers);//isXXX()系列函数用以检查特定的修饰符是否存在
二、类内部信息获取
总结:
1、获取构造函数
//获取public类型的构造函数
Constructor<?>[] getConstructors();
Constructor<T>[] getConstructor(Class<?>... parameterTypes);
//获取所有类型的构造函数
Constructor<?>[] getDeclaredConstructors();
Constructor<T>[] getDeclareConstructor(Class<?>... parameterTypers);
2、Constructor系列方法之构造实例
public T newInstance(Object... args);
(newInstance可以传入可变长 参数,传入的参数类型、顺序、个数都必须与当前Constructor对象一一对应)
(*)在反射中,总共有三种类型具有getAccessible(boolean flag)函数
Constructor Feild Method
构造函数 成员变量 成员函数
3、Constructor系列方法之获取参数类型
Class<?>[] getParameterTypes();//用于解析一般函数
Type[] getGenericParameterTypes();//用于解析范型对象
4、Constructor系列方法之获取构造方法的访问修饰符
Class<?> class = Person.class;
Constructor<?>[] constructors = class.getDeclaredConstructors();
for(Constructor<?> c : constructors){
c.setAccessbile(true);
int modifier = c.getModifiers();
System.out.println(Modifier.toString(modifier));
}
5、Constructor系列方法之getDeclaringClass()
Class<?> getDeclaringClass();//用于得到声明Constructor的类的Class对象
Class<?> c = Person.class;
Constructor<?>[] constructor = c.getDeclaredConstructor();
Class<?> declarClass = constructor.getDeclaringClass();
System.out.println(declarClass.getName());
(二)、成员变量的获取与设置
1、获取Field对象
//仅能获取声明类型为public的成员变量
Field[] getFields();
Field getField(Sting name);//得到指定变量名的对应的Field对象
//可以获取全部的成员变量
Field[] getDeclaredFields();
Feild getDeclaredField(string name);//得到指定变量名的对应的Field对象
field.getName();//用于得到当前成员变量的名称
field.getType();//用于得到当前成员变量的类型
2、Field的 get set操作
//获取、设置指定类对象中某变量的值
//第一个参数Object为要设置的对象,第二个参数是此Field对象对应的值
void set(Object object, Object value)
//参数是要获取值的类的对象,返回值为在此类的实例中,对应成员变量的值
Object get(Object object)
3、Field之Modifiers与getDeclaringClass()
//获取该成员变量所对应的访问修饰符所对应的int数字
int getModifiers()
//获取声明该变量的类
Class<?> getDeclaringClass()
(三)成员函数的获取与设置
1、获取Method对象
Method[] getMethods()
Method getMethod(String name , Class<?>... parameterTypes)
Method[] getDeclaredMethods()
Method getDeclaredMethod(String name , Class<?>... parameterTypes)
2、Method之Invoke
invoke函数的功能是用于执行Method对象所对应的函数的。
Object invoke(Object receiver , Object ... args)
Object receiver : 执行该函数的类对象
Object... args :可变长参数,用于传入该函数声明中的参数所对应值的列表
3、Method之获取参数类型
Class<?>[] getParameterTypes()
Type[] getGenericParameterTypes()
4、Method之获取返回值类型
Class<?> getReturnType()
Type getGenericReturnType()