反射是Java被视为动态语言的关键,反射机制允许程序在执行期借助于反射API取得任何类的内部信息,并能够直接操作任意对象的内部属性及方法。
获取Class
对象的常用方法:
Class c=Class.forName("java.lang.String");
即使是private
修饰的关键词也可以读取到。
功能:
1)在运行时判断任意一个类所具有的的成员变量和方法;
2)在运行时获得泛型信息;
3)在运行时处理注解;
4)生成动态代理;
5)在运行时判断任意一个对象所属的类;
6)在运行时构造任意一个类的对象;
instanceof
用来判断是否为某个类的实例:
System.out.println(Class.forName(properties.getProperty("FactoryName")).newInstance() instanceof IFactory );
- 使用
newInstance()
方法来创建Class
对象对应类的实例。
IFactory operFactory = (IFactory) Class.forName("AddFactory").newInstance();
- 优缺点:
优点:
1)提高了程序的灵活性和扩展性,降低模块耦合度;
2)在运行时获得类的各种内容,调用对象的方法。
3)使用反射可以避免将代码写死在框架中。
缺点:
1)反射会消耗一定的系统资源,反射操作的效率要比正常操作的效率低很多;
2)反射调用方法时可以忽略权限检查,因此可能会破坏封装性而导致安全问题。