JAVA 反射总结
Java 反射机制重点总结
一、核心类
Class类 - 反射入口,代表类的字节码对象
- 获取方式:
类名.class
(如String.class
)对象.getClass()
(如"abc".getClass()
)Class.forName("全类名")
(如Class.forName("java.lang.String")
)
- 获取方式:
Constructor类 - 代表构造方法,用于创建对象
Method类 - 代表成员方法,用于调用方法
Field类 - 代表成员变量,用于获取/设置变量值
二、核心API及方法
得先获得Class对象
1. 通过Class类获取 构造器 \ 方法\字段
获取构造器:
getConstructor(Class<?>... parameterTypes)
- 获取public构造器getDeclaredConstructor(Class<?>... parameterTypes)
- 获取任意修饰符构造器(包括private)getConstructors()
- 获取所有public构造器数组
获取方法:
getMethod(String name, Class<?>... parameterTypes)
- 获取public方法getDeclaredMethod(String name, Class<?>... parameterTypes)
- 获取任意修饰符方法getMethods()
- 获取所有public方法(包括继承的)
获取成员变量 (字段):
getField(String name)
- 获取public变量getDeclaredField(String name)
- 获取任意修饰符变量getFields()
- 获取所有public变量
2. 通过Constructor创建对象
newInstance(Object... initargs)
- 调用构造器创建实例- 私有构造器需先调用
setAccessible(true)
打破访问限制
3. 通过Method调用方法
invoke(Object obj, Object... args)
- 调用方法- obj: 调用方法的实例(静态方法传null)
- args: 方法参数
- 私有方法需先调用
setAccessible(true)
4. 通过Field操作变量
get(Object obj)
- 获取变量值 (静态变量传null)set(Object obj, Object value)
- 设置变量值- 私有变量需先调用
setAccessible(true)
三、其他重要方法
Class.getName()
- 获取全限定名(如java.lang.String
)Class.getSimpleName()
- 获取简单名称(如String
)Class.newInstance()
- 通过无参构造创建对象(已过时)