反射机制与代理机制

反射

获得对应的Class对象,以及创建其实例

三种获取对应Class对象的方法

①通过实例对象获取对应类的类对象

e.getClass();

② 通过定义一个字符串类名,获取一个类对象

String str = "java.util.date";
Class.forName(str);

③通过类名获取类对象

Employee.class

通过获得的Class对象,调用其newInstance()方法创建其实例

AClass.newInstance();

利用反射分析类的能力

分析一个类的能力从三方面入手,其域、方法和构造器。反射java.util.reflact包中有这三方面相关的获取方法,可以得知一个类实际的类能力。

  • Field 域
  • Method 方法
  • Constructor 构造器

在运行时使用反射分析类

在运行时,可以通过类属性获得某个指定的实例对象

使用反射编写泛型数组代码

反射机制允许你调用任意方法

允许调用包装在当前Method对象中的方法

比如:m1代表Employee类的getName方法
Method m1 = Employee.class.getMethod(“getName”,String.class);
String n = (String)m1.invoke(harry);

总结

反射机制使得人们可以通过在运行时查看域和方法,让人们编写出更具体有通用性的程序。这种功能对于编写系统程序来说极其实用。

## **代理** 利用代理可以在运行时创建一个实现了一组给定接口的心类,这种功能只有在编译时 无法确定需要实现哪个接口时,才有必要使用。 无论何时调用代理对象的方法,调用处理器的invoke方法都会被调用。并向其传递Method对象和原始的调用参数。

代理的作用是:为其它对象提供一种代理以控制对这个对象的访问。在某些情况下,一 个客户不想直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介作用。通过代理类这一中间层,能够有效控制对实际委托类对象的直接访问,也可以很好地隐藏和 保护实际对象,实施不同的控制策略,从而在设计上获得了更大的灵活性。