反射
Class本身就是一个类
Class对象只能由系统创建
反射的实现方式
方式 | 演示 |
---|---|
通过对象获取 | User user = new User(); Class c1 = user.getClass() |
通过Class类的forName()静态方法 | Class c2 = Class.forName(“com.radish.domain.User”); |
通过类名.class | Class c3 = User.class |
代码演示:
public stati void main(String[] args) {
// 方式一:使用对象
User user = new User();
Class c1 = user.getClass();
// 方式二:使用Class的静态方法forName()
Class c2 = Class.forName("com.radish.User");
// 方式三:使用类的.class
Class c3 = User.class;
}
反射中常用的方法
- 创建一个实例对象
- 获取字段,字段属性
- 获取方法,方法属性
- 构造器等
方法名 | 功能 |
---|---|
newInstance | 相当于使用无参构造器new一个对象 |
getConstructor | 获取对象的构造器对象 |
getMethods / getDeclaredMethods | 获取方法对象数组,不带Declared的方法可以获取本类和父类的方法,但是必须使用public。而带有Declared的方法,只能获取本类所有方法,包含(private,protect,public) |
getMethod / getDeclaredMethod | 通过指定方法名称获取一个指定方法,Declared的作用和上方相同 |
getFields / getDeclaredFields | 获取类中的字段,返回一个Filed数组,Declared的作用和上方相同 |