java中的反射原理

什么是反射

反射是java提供的动态检查机制,动态的检查对象和类,分析出对象的类型,属性和方法。可以进一步动态加载类,动态创建对象,动态访问属性和方法。

反射的作用

  • 反射最大一个功能是提供了强大的动态执行功能。
  • 反射经常用于处理程序直接的耦合关系,实现松耦合。组件和组件之间是动态链接调用的,也就是运行期动态加载,动态调用。
  • 反射常用于解耦。

经典面试题

1.Eclipse中动态的快捷菜单利用什么技术实现的?
答:利用反射技术动态获取类信息,加载到菜单中。
2.java中可以访问私有方法吗?
答:一般情况是不能直接访问的,但是使用发射API就行。
使用方法:

method.setAccessible(true);

使用方法

1.利用反射检查对象的类型

//返回结果cls代表对象的类型
class cls=obj.getClass();

2.动态加载类到方法区

class cls=class.forName(className);

3.动态获取一个类的所有属性信息(不是属性的值)

File[] fields=cls.getDeclaredFields();

4.动态查找类中声明的方法信息

Method[] methods=cls.getDeclaredMethods();

5.将私有方法设为可访问的

method.setAccessible(true);

6.动态执行一个方法

//val是方法的返回值
Object val=method.invoke(obj);
      //动态获取对象中全部方法
      Method[] methods=cls.getDeclaredMethods();
      for(Method method:methods){
        //获取方法的名称
        String name=method.getName();
        if(name.startsWith("test"){
          //将私有方法设为可访问的
          method.setAccessible(true);
          //动态执行一个方法
          Object val=method.invoke(obj);
      }
   }
     //name为属性名称
     Field field=cls.getDeclaredField(name);
     //获取属性的类型,java中类型用class表示
     Class type=field.getType();
     //判断所有类型
    if(type==int.class){
       ...
    }else if(type==double.class){
      ...
    }
   //动态获取obj对象的属性field的值
   Object val=field.get(obj)

你可能感兴趣的:(java)