#bk1 {background-color: yellow}
* 什么是反射
* 在运行期,可以动态的获取类的信息,创建类的对象以及执行类的方法,获取类的属性的值等等。
Class类
- Class类的对象保存了类的运行时信息,每个Class类对象对应一个类的运行时信息。
获取Class对象的方法有以下三种:
- Class clazz=Class.forName(String className)
- Class clazz=String.class
- String str=new String(“”);Class clazz=str.getClass()
获取Class类的信息:
- 构造函数:
public Constructor<?>[] getConstructors() throws SecurityException
,获取所有的public类型的构造函数public Constructor<T> getConstructor(Class<?>... parameterTypes)
*方法,获取以parameterTypes为参数的构造函数- 属性:
- public Field getField(String name),获取属性名称为name的属性。
- public Object get(Object obj),Field类的方法,用于获取某个字段的值,这个方法是静态时,obj为null;非静态时,传入对象,获取对象的那个字段的值。Class clazz=A.class;Object obj=clazz.newInstance(); Field field=clazz.getField(“name”);field.get(obj);
- 方法:
- public Method[] getMethods() throws SecurityException,获取所有公有方法;
public Method getMethod(String name, Class<?>... parameterTypes)
,获取方法名为name ,参数为parameterTypes的公有方法。- public Method[] getDeclaredMethods() throws SecurityException,获取所有方法,包括公有、私有、保护,但是不包括基类的方法。
- public Object invoke(Object obj, Object… args),在运行期动态的执行一个方法。
- 修饰符:Class、Field、Method、Construct等都有修饰符,所有他们都有public int getModifiers()方法, Modifier.toString(method.getModifiers()) ,这可以转化为public、static这些字符串。
- 屏蔽private、protected等访问权限,AccessibleObject.setAccessible(boolean flag);