反射
Class

获取到对应class的各种信息:加载该类的类加载器,方法,字段,构造器,全类名
1,获取Class对象的方法
方面名称 | |
---|
static Class forName(String name) | 静态方法 |
对象.getClass() | |
类.class | |
2,获取类的构造方法
获取访问修饰符为:public
方法 | 说明 |
---|
Constructor<?> getConstructor(Class... parameterTypes) | 根据参数类型获取该类的public构造方法 |
Constructor[] getConstructors() | 获取该类的所有public构造方法 |
package ekko.spring.v1.test;
public class testdemo {
private String name;
public String password;
int i;
public testdemo(){}
public testdemo(int i){
System.out.println(i);
}
private testdemo(String t){
System.out.println(t);
}
testdemo(Long i){
System.out.println(i);
}
}
Class<?> testdemo1 = Class.forName("ekko.spring.v1.test.testdemo");
Constructor<?> constructor = testdemo1.getConstructor(int.class);
Constructor<?> constructor2 = testdemo1.getConstructor();
System.out.println(constructor);
System.out.println(constructor2);
Constructor<?>[] constructors = testdemo1.getConstructors();
for (Constructor c: constructors) {
System.out.println(c);
}
获取所有修饰符的方法
方法 | 说明 |
---|
Constructor getDeclaredConstructor(Class... parameterTypes) | 根据参数类型获取构造方法 |
Constructor[] getDeclaredConstructors() | 获取所有构造构造方法 |
System.out.println(testdemo1.getDeclaredConstructor(String.class));
Constructor[] declaredConstructors = testdemo1.getDeclaredConstructors();
for (Constructor c: declaredConstructors) {
System.out.println(c);
}
3,获取类的字段
方法 | 说明 |
---|
Field getField(String name) | 根据属性名称获取public的属性 |
Field[] getFields() | 获取所有的public的属性 |
Field getDeclaredField(String name) | 根据属性名称获取属性 |
Field[] getDeclaredFields() | 获取所有的属性 |
4,获取类的方法
方法 | 说明 |
---|
Method getMethod(String name, Class... parameterTypes) | 通过参数类型获取修饰符为public的方法 |
Method[] getMethods() | 获取所有的public的方法 |
Method getDeclaredMethod(String name, Class... parameterTypes) | 根据参数类型获取任意的方法 |
Method[] getDeclaredMethods() | 获取所有的方法 |
5,获取类的注解
Constructor

方法 | 说明 |
---|
void setAccessible(boolean flag) | 设置为true,不检查方法的修饰符 |
T newInstance(Object... initargs) | 创建对象 |
Method

方法 | 说明 |
---|
void setAccessible(boolean flag) | 设置为true,不检查方法的修饰符 |
Object invoke(Object obj, Object... args) | 使得某个对象执行该方法 |
Field

方法 | 说明 |
---|
void setAccessible(boolean flag) | 设置为true,set和get时不检查的修饰符 |
void set(Object obj, Object value) | 设置某个对象的该属性值 |
Object get(Object obj) | 获取该obj对象的该属性 |
Array
有时候方法返回值是数组,但是返回的对象是Object类型,需要通过反射包提供的工具类进行处理
方法 | 说明 |
---|
static Object get(Object array, int index)` | 指定索引的值 |