Java的反射机制
Java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。反射被视为动态语言的关键
Java反射机制的作用
1、反编译:.class-->.java
2、通过反射机制访问java对象的属性,方法,构造方法等
3、当我们在使用IDE,比如Ecplise时,当我们输入一个对象或者类,并想调用他的属性和方法是,一按点号,编译器就会自动列出他的属性或者方法,这里就是用到反射。
4、反射最重要的用途就是开发各种通用框架。
反射机制常用的类:
Java.lang.Class;
Java.lang.reflect.Constructor;
Java.lang.reflect.Field;
Java.lang.reflect.Method;
Java.lang.reflect.Modifier;
获得Class:主要有三种方法:
(1)Object-->getClass
(2)任何数据类型(包括基本的数据类型)都有一个“静态”的class属性
(3)通过class类的静态方法:forName(String className)(最常用)
Constructor类
(1)批量获取的方法:
public Constructor[] getConstructors():所有"公有的"构造方法
public Constructor[] getDeclaredConstructors():获取所有的构造方法(包括私有、受保护、默认、公有)
(2)单个获取的方法,并调用:
public Constructor getConstructor(Class... parameterTypes):获取单个的"公有的"构造方法:
public Constructor getDeclaredConstructor(Class... parameterTypes):获取"某个构造方法"可以是私有的,或受保护、默认、公有;
(3) 调用构造方法:
Constructor-->newInstance(Class的newInstance()方法用来调用类的默认构造方法)
newInstance是 Constructor类的方法(管理构造函数的类)
Field类
一、Field类的作
Field是一个类,位于java.lang.reflect包下。在Java反射中Field类描述的是类的属性信息,功能包括
(1)获取当前对象的成员变量的类型
(2)对成员变量重新设值
二、获取Field类对象的四种方法
(1)Class.getFields():获取类中public类型的属性,返回一个包含某些 Field 对象的数组,该数组包含此 Class 对象所表示的类或接口的所有可访问公共字段
(2)getDeclaredFields():获取类中所有的属性(public、protected、default、private),但不包括继承的属性,返回 Field 对象的一个数组
(3)getField(String name): 获取类中特定的属性,name参数指定了属性的名称
(4)getDeclaredField(String name):获取类特定的属性,name参数指定了属性的名称
三、Field 类对象常用方法
获取变量的类型
(1)Field.getType():返回这个变量的类型
(2)Field.getGenericType():当前属性有签名属性类型就返回,否则就返回 Field.getType()
(3)isEnumConstant() : 判断这个属性是否是枚举类
Method类
Method类提供有关类或接口上单个方法的信息和访问权限。Method反映的方法可以是类上的实力方法或者是静态方法也可以是接口上的抽象方法。
获取所有的方法
通过Class类的getDeclaredMethods方法可以获取某个类所定义的所有方法。
public Method[] getDeclaredMethods() throws SecurityException
获取公共方法
通过Class的getMethods方法可以获取到所有public修饰的公共方法。
public Method[] getMethods() throws SecurityException
获取指定方法
通过Class类的getMethod方法,传入方法名称和参数列表类型,可以获取到某个类的指定方法。