反射
放射定义在反射包中:java.lang.reflect包。
反射机制:Java中动态获取类的信息的技术。
扩展功能:
1:使用多态:
暴露接口,实现接口,new类调用方法,多态调用。
2:使用反射:
如果代码已经写好了,现在无法new类。使用反射。
要运行的类不确定,配置文件配置类,解析配置文件,找到配置的类,反射加载、创建、调用。
Class类:
用于描述字节码文件的类。内部提供了获取类内的内容的的方法。
放射就是依靠该类实现的。
想要获取一个类的内容,获取该类的字节码文件对象。
获取字节码文件对象:
1:Object类中的getClass()方法。
需要先有对象,然后调用getClass()方法。
2:使用类的class属性。
需要先知道类名,然后调用class属性。
3:使用Class类中的 Class forName(String 全类名)方法。
他会根据类名到ClassPath中找类。
使用Class的对象获取类内容:
构造对象:
空参构造:
使用Class类构造别的类实例通过:c.newInstance()相当于new Xxx();
使用Class类构造实例只有这一个方法。
有参构造:
如果需要使用有参构造,通过获取并调用有参构造方法来实现。
获取构造方法:
getConstructor(Class<?>... parameterTypes)
getConstructors()
getDeclaredAnnotations()
以上三个方法会返回一个Constructors对象。即构造方法对象。
Constructors中有创建对象的方法。
获取字段:
Field[] getFields()
Field getField(String name)
Field getDeclaredField(String name)
Field[] getDeclaredFields()
返回一个Field对象。
获取函数:
Method[] getMethods()
Method getMethod(String name, Class<?>... parameterTypes)
返回一个Method对象
使用Method中的Object invoke(Object obj, Object... args)方法调用
obj是所属对象,args是参数列表。
Constructors类:
构造方法类,用于描述构造方法。
Field类:
字段类,用于描述字段。
Method类:
方法类,用于描述方法。