反射
1. 概述
java反射机制是在运行时,能够知道任意一个类的所有属性和方法;并且对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取信息以及动态调用对象的方法的功能称为java语言的反射机制。反射就是把java类中的各种成分映射成一个个的java对象。
2. 获取Class对象的三种方式
(1) 类对象.getClass();
(2) 类型名.Class(各种类型,包括基本数据类型)
(3) 调用Class.forName(全限定名)
创建对象实例:Class对象.newInstance()方法
3. 获取构造方法
(1) public Constructor[] getConstructors():获取所有“公有的”构造方法
(2) public Constructor[] getDeclaredConstructors():获取所有的构造方法(包括私有、受保护、默认、公有)
(3) public Constructor getConstructor(Class...parameterTypes):获取某个“公有的”构造方法
(4) public Constructor getDeclaredConstructor(Class...parameterTypes):获取某个构造方法(包括私有、受保护、默认、公有)
调用构造方法:
Constructor.newInstance(Object...initargs)
4. 获取成员变量:
(1) public Field[] getFields():获取所有的公有字段
(2) public Field[] getDeclaredFields():获取所有字段,包括:私有、受保护、默认、公有
(3) public Field getField(String name):获取某个公有字段
(4) public Field getDeclaredField(String name):获取某个字段,包括:私有、受保护、默认、公有
设置成员变量的值
Feild.set(Object obj, Object value)
5. 获取成员方法:
(1) public Method[] getMethods():获取所有公有方法(包含了父类的方法也包含Object类)
(2) public Method[] getDeclaredMethods():获取所有成员方法,包括私有的(不包含父类的方法)
(3) public Method getMethod(String name, Class<?>... parameterTypes):获取某个公有方法
(4) public Method getDeclaredMethod(String name, Class<?>... parameterTypes):获取某个方法(可以是私有的)
调用成员方法
Method.invoke(Object obj, Object... args)
6. 获取其他信息
获取类实现的接口:
public Class<?>[] getInterfaces()
获取父类
public native Class<? super T> getSuperclass()
获取修饰符
public native int getModifiers()