反射:加载类,并允许以编程的方式解剖类的各种成分(成员变量、方法、构造器)
获取某些类的信息、操作他们
第一步:加载类、获取类的字节码:class对象
获取class对象的三种方式:
Class c1 = 类名.class
调用Class提供的方法 public static Class forName(String package)
Object提供的方法:Class c3 = 对象.getClass()
2.获取类的构造器:constructor对象
返回的都是构造器对象数组 需要用Constructor【】数组来接 右边用 类名.getConstructor()获取全部构造器(只能获取public修饰符的)
getDeclaredConstructors()只要存在就能拿到的 俩者都可以带参来获取特定的构造器参数要以 int.class 等放进去
newInstance()创建对象,可以传参
setAccessible()设置为true,禁止检查访问控制(暴力反射)
3.类的成员变量:field对象
public Filed【】 getFields() 获取类的全部成员变量(只能获取public修饰的)
public Filed【】 getDeclaredFields()获取类的全部成员变量(只要存在就能拿到)
获取一个,就加成员变量的名字
4.类的成员方法:Method对象
方法基本上同上
作用:得到一个类的全部成分然后操作
可以破坏封装性
适合做Java的框架,主流的框架都会基于反射设计出一些通用的功能