反射机制

1、反射机制是什么

反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。(简单说就是:有了反射你就能拿到并使用指定类里的任何信息)

2、反射机制能做什么

反射机制主要提供了以下功能:

  • 在运行时构造任意一个类的对象;
  • 在运行时判断任意一个对象所属的类;
  • 在运行时判断任意一个类所具有的成员变量和方法;
  • 在运行时调用任意一个对象的方法;
  • 生成动态代理。
    注:"运行时", java项目运行过程分为"编译"、"运行"。使用反射机制可以绕过编译直接运行。

3、反射机制的实例应用

假设我们现在用Java开发了一款工具合集软件,里面内置了计算器、指南针等基础工具模块,现在我们每个月开发一个新的小工具,并添加到这个工具合集内.

  • 常规方式:在源代码中添加新的功能模块,重新编译、打包,用户重新安装一遍。
  • 使用反射:通过更新的方式下载最新的功能模块文件,使用反射直接访问类文件中的属性,方法。动态加载、创建功能模块对象。

不需要经过重新编译和打包,这就意味着用户不再需要每隔一个月就重新安装一次软件。

4、反射机制的常用api

4.1、通过路径获取类类型

Class viewType = Class.forName("com.douleDong.Computer.View");
String className = viewType.getSimpleName();

4.2、通过类类型创建对象

-- 实例化对象
viewType view = (viewType)catType.newInstance();

4.3、获取属性/方法

-- 获得所有(自身定义的)属性
Field[] fields          = viewType.getFields()/viewType.getDeclaredFields();
-- 获取所有(自身定义的)方法
Method[] method            = viewType.getMethods()/viewType.getDeclaredMethods();
-- 获取所有的构造方法
Constructor cons[]      = viewType.getConstructors();

4.4、调用指定方法

-- 获取指定构造函数
Constructor constructor = oc.getConstructor(String.class);
-- 使用构造函数创建对象
View view = (View)constructor.newInstance("天线宝宝");
-------------------------------------------------------
-- 公有方法
-- 获取指定的方法对象
Method method = oc.getMethod("play");
-- 使用(调用)该方法对象
method.invoke(usb);
-------------------------------------------------------
-- 私有方法
-- 获取无参方法oc.getDeclaredMethod("close")
Method method1 = oc.getDeclaredMethod("close", double.class);               
-- 获取访问权
method1.setAccessible(true);
method1.invoke(usb, 2.5);

4.5、获取指定属性

-- 使用公有(私有)属性
Field field = oc.getDeclaredField("age");
field.setAccessible(true);
field.set(usb, 10);
System.out.println("这个显示器已经用了" + field.get(usb) + "年");

你可能感兴趣的:(反射机制)