-
反射机制
- 反射机制是在程序运行状态中,对于任意一个类,都能够获取这个类的所有属性和方法;
- 也可以利用反射机制生成一个类的对象;
- 对于任意一个对象,都能够调用它的任意一个方法和属性及为属性赋值;
- 可以实现简单的反编译,获取类中的属性和方法等基本信息,.class—>java
- 这种动态获取信息以及动态调用对象的方法的功能称为java语言的反射机制。
利用反射机制创建一个类的对象
Class c = Class.forName("包名.A");
Object o = c.newInstance();//即创建一个A类的对象,与A a = new A();效果相同
利用反射机制获取类的属性值及为其赋值
Class class1 = Class.forName("Reflect.Person");
Object o = class1.newInstance();
Field f = class1.getDeclaredField("age");//这里的age是Person类的一个属性名称
f.setAccessible(true);//若age的修饰符为private,则打破封装性
f.set(o, 20);//为其赋值
System.out.println(f.get(o));//输出该对象age属性值
反射机制的常用其他方法
Class对象常用调用的方法
getDeclaredMethod(String name, Class<?>… parameterTypes) | 返回值为 Method 该方法用于获取某个类里的指定方法 (非构造方法) |
---|---|
getDeclaredMethods() | 返回值为 Method[] ,即该类的所有方法(非构造方法) |
getDeclaredConstructors() | 返回值为Constructor[] ,即该类的所有构造方法 |
getInterfaces() | 返回值为Class[] ,表示该类的所有接口 |
getSuperclass() | 得到其父类对象 |
getName() | 返回包名.类名 |
getSimpleName() | 返回类名 |
getModifiers() | 返回值为Int,表示该类的修饰符通常与Modifier.toString(int mod)联合使用 |
Method对象调用的方法
getReturnType() | 返回值为Class 即返回该方法的返回类型 |
---|---|
getModifiers() | 返回值为int ,表示该方法的修饰符通常与Modifier.toString(int mod)联合使用 |
getName() | 返回方法名 |
getParameterTypes() | 返回值为Class[] ,即返回该方法所有的参数类型 |