反射定义:
程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。一个类有多个组成部分,例如:成员变量、方法、构造方法等,反射就是加载类,并解剖出类的各个组成部分。
功能作用:
反射机制主要提供以下功能:
①在运行时判断任意一个对象所属的类;
②在运行时构造任意一个类的对象;
③在运行时判断任意一个类所具有的成员变量和方法;
④在运行时调用任意一个对象的方法;
⑤生成动态代理。
②在运行时构造任意一个类的对象;
③在运行时判断任意一个类所具有的成员变量和方法;
④在运行时调用任意一个对象的方法;
⑤生成动态代理。
与反射有关的类:
java.lang.Class;
java.lang.reflect.Constructor;
java.lang.reflect.Field;
java.lang.reflect.Method;
java.lang.reflect.Modifier;
使用步骤:
导入java.lang.relfect包
三个步骤
第一步,是获得你想操作的类的java.lang.Class对象
第二步,是调用诸如getDeclaredMethods的方法
第三步,使用反射API来操作这些信息
获得Class对象的方法
1、如果一个类的实例已经得到,你可以使用
Class c =对象.getClass()
2、如果你在编译期知道类的名字,你可以使用如下的方法
Class c = java.awt.Button.class
3、如果类名在编译期不知道,但是在运行期可以获得,你可以使用下面的方法
Class c = Class.forName(str)
反射优点:
(1)能够运行时动态获取类的实例,大大提高系统的灵活性和扩展性。
(2)与Java动态编译相结合,可以实现无比强大的功能
反射缺点:
(1)使用反射的性能较低
(2)使用反射相对来说不安全
(3)破坏了类的封装性,可以通过反射获取这个类的私有方法和属性