Java反射相关方法(万物皆对象)

一、Java的反射机制

  java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的实例对象,可以知道任意一个实例对象它属于哪个类,并知道该类的相关信息,可以了解任意一个类的成员变量和方法,可以调用任意一个实例对象的属性和方法。这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。反射被视为动态语言的关键。

二、反射机制提供的功能

  在运行时判断任何一个实例对象所属的类,在运行时构造任意一个类的实例对象,在运行时判断任意一个类所具有的成员变量和方法,在运行时调运任何一个实例对象的方法以及属性等

三、获取反射对象,最主要的是了解反射主要的API

>java.lang.Class:               //代表一个类
>java.lang.reflect.Method:      //代表类的方法
>java.lang.reflect.Filed:    //代表类的成员变量
>java.lang.reflect.Constructer: //代表类的构造器
>>>等等

四、通过反射获取类的Class对象的四种方式

1、调用运行时类本身的class属性

  Class clazz = Book.class;
2、通过运行时类的对象获取
  Book book = new Book();
  Class clazz = book.getClass();
3、通过Class对象的静态方法获取:体现反射的动态性
  Class clazz = Class.forName("com.donleo.cn.reflex.Book");
4、通过类的加载器
  ClassLoader classLoader = this.getClass().getClassLoader();
  Class clazz = classLoader.loadClass("com.donleo.cn.reflex.Book");

五、Java反射相关的类

Class类      代表类的实体,在运行的Java应用程序中表示类和接口
Field类       代表类的成员变量(成员变量也称为类的属性)
Method类     代表类的方法
Constructor类   代表类的构造方法

六、获得类中属性相关的方法

getField(String name)            //获得某个公有的属性对象
getFields()                      //获得所有公有的属性对象
getDeclaredField(String name)    //获得某个属性对象
getDeclaredFields()          // 获得所有属性对象

七、获得类中注解相关的方法

getAnnotation(Class<A> annotationClass)        //返回该类中与参数类型匹配的公有注解对象
getAnnotations()                    //返回该类所有的公有注解对象
getDeclaredAnnotation(Class<A> annotationClass) //返回该类中与参数类型匹配的所有注解对象
getDeclaredAnnotations()               //返回该类所有的注解对象

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

getConstructor(Class...<?> parameterTypes)       //获得该类中与参数类型匹配的公有构造方法
getConstructors()                     //获得该类的所有公有构造方法
getDeclaredConstructor(Class...<?> parameterTypes) //获得该类中与参数类型匹配的构造方法
getDeclaredConstructors()                // 获得该类所有构造方法

九、获得类中方法相关的方法

getMethod(String name, Class...<?> parameterTypes)       //获得该类某个公有的方法
getMethods()                             //获得该类所有公有的方法
getDeclaredMethod(String name, Class...<?> parameterTypes) //获得该类某个方法
getDeclaredMethods()                        //获得该类所有方法

十、类中其他重要的方法

isAnnotation()                               //如果是注解类型则返回true
isAnnotationPresent(Class<? extends Annotation> annotationClass) //如果是指定类型注解类型则返回true
isAnonymousClass()                            //如果是匿名类则返回true
isArray()                                 //如果是一个数组类则返回true
isEnum()                                 //如果是枚举类则返回true
isInstance(Object obj)                         //如果obj是该类的实例则返回true
isInterface()                              //如果是接口类则返回true
isLocalClass()                            // 如果是局部类则返回true
isMemberClass()                            //如果是内部类则返回true

十一、Field类

Field代表类的成员变量(成员变量也称为类的属性)

equals(Object obj)         // 属性与obj相等则返回true
get(Object obj)          //获得obj中对应的属性值
set(Object obj, Object value) //设置obj中对应属性值

 



posted @ 2020-12-01 16:19  donleo123  阅读(174)  评论(0编辑  收藏  举报