java反射机制

定义

JAVA反射机制是在运行状态中,对于任意的一个类,都能够知道这个类的所有属性和方法;对于任意的一个类,都能够调用这个类的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制;

用途

在日常的第三方应用开发过程中,经常会遇到某个类的某个成员变量、方法、构造方法是私有的或是只对系统内开放,这时就可以利用java的反射机制通过反射来获取所需的私有方法和属性;但是也不是所有的的都适合反射,对于没有权限的应用返回值是没有任何意义的缺省值;

反射机制的相关类

  • class类:代表类的实体,在运行的java应用程序中表示类和接口;
  • field类:代表类的成员变量(成员变量也称为类的属性)
  • method类:代表类的方法;
  • constructor类:代表类的构造方法;

class类

获得类相关的方法

  • asSubclass(Class clazz)把传递的类的对象转换成代表其子类的对象;
  • cast 把对象转换成代表类或是接口的对象;
  • getClassLoader() 获得类的加载器;
  • getClasses() 返回一个数组,数组中包含该类中所有公共类和接口类的对象;
  • getDeclaredClasses() 返回一个数组,数组中包含该类中的所有类和接口类的对象;
  • forName(String className) 根据类名返回类的对象;
  • getName() 获得类的完整路径名字;
  • newInstance() 创建类的实例;
  • getPackage()获得类的包;
  • getSimpleName() 获得类的名字;
  • getSuperclass() 获得当前类继承的父类的名字;
  • getInterfaces() 获得当前类实现的类或是接口;

获得类中属性相关的方法

  • getField(String name) 获得某个共有的属性对象;
  • getFields() 获得所有共有的属性对象;
  • getDeclaredField(String name) 获得某个属性对象;
  • getDeclaredFields() 获得所有属性对象;

获得类中注解相关的方法;

  • getAnnotation(Class annotationClass) 返回该类中与参数类型相匹配的共有注解对象;
  • getAnnotations() 返回该类中所有的共有注解对象;
  • getDeclaredAnnotation(Class annotationClass) 返回该类中于参数类型匹配的注解对象;
  • getDeclaredAnnotations() 返回该类中所有的注解对象;

获得类中构造器相关的方法;

  • getConstructor(Class.. parameterTypes)获得该类中与参数类型匹配的共有构造方法;
  • getConstructors() 获得该类的所有共有构造方法;
  • getDeclaredContructor(Class.. parameterTypes) 获得该类中与参数类型匹配的构造方法;
  • getDeclaredConstructor()获得该类中所有构造方法;

获得类中方法的相关方法;

  • getMethod(String name,Class.. parameterTypes) 获得该类中的某个共有方法;
  • getMethods() 获得该类中的所有共用方法;
  • getDeclaredMethod(String name,Class.. parameterTypes) 获得该类中的某个方法;
  • getDeclaredMethods() 获得该类中的所有方法;

类中其他的重要方法;

  • isAnnotation()如果是注解类型则返回true;
  • isAnnotationPresent(Class annotationClass)如果是指定类型的注解则返回true;
  • isAnonymousClass() 如果是匿名内部类则返回true;
  • isArray() 如果是一个数组类型则放回true;
  • isEnum()如果是枚举类型则返回true;
  • isInstance(Object obj)如果是obj是当前类的实例则返回true;
  • isInterface()如果当前类是接口类型则返回true;
  • isLocalClass()如果是局部类则返回true;
  • isMemberClass() 如果是内部类则返回true;

filed类

  • equals(Object obj)属性和obj相等则返回true;
  • get(Object obj)获取obj中对应的属性值;
  • set(Object obj,Object value)设置obj中对应属性的值

Method 类

  • invoke(Object obj,Object... args)传递object对象及参数调用该对象的方法;

constructor类

  • newInstance(Object initargs) 根据传递的参数创建类的对象;

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