指程序可以访问、检测和修改它本身状态或行为的一种能力
Java 通过字节码反射出类中的信息,包含:类、属性、方法、构造、继承、实现
在 JDK 中java.lang
包与java.lang.reflect
包下
一. Class 类
在反射中 Class 代表一个类,也叫类类型,是 Java 数据类型中的一种
创建方式
Class.forName("完整路径")
类名.class
对象名.getClass()
常用方法
getName()
:获取类的完整路径
getSimpleName()
:获取类的名称
newInstance()
:创建类的新实例,就是新对象
二. Java 中的数据类型(☆)
基本数据类型(8种)
引用类型(数组和对象)
枚举
类类型
四. Constructor
在 Java 反射中 Constructor 的一个实例代表一个类的构造方法,可以通过类类型获取
class对象.getConstructors()
:获取所有的构造方法,返回一个构造方法数组
class对象.getConstructor()
:获取指定构造方法
常用方法
getName()
:获取构造方法的名称
getParameterTypes()
:获取构造方法参数列表
getModefiers()
:获取构造方法访问修饰符
getExceptionTypes()
:获取构造方法的异常
newInstance()
:根据指定的构造方法创建对象
五. Filed
在 Java 反射中 Filed 一个实例代表一个类中的属性
创建方式
getDeclaredFields()
:获取本类中的所有属性,返回一个属性数组
getDeclaredField(String name)
:根据名称获取本类中的单个属性
getFields()
:获取父类、父接口中所有的 public 修饰的属性
getField(String name)
:根据名称获取父类,父接口中的 public 修饰的属性
常用方法
getName()
:获取属性名称
getModifiers()
:获取属性访问修饰符
getType()
:获取属性数据类型
setAccessible(boolean b)
:设置私有变量的访问权限,默认为 false
set(Object obj, Object value)
:给属性赋值
get(Objuct obj)
:获取属性值
getModifiers()
:获取该属性的访问修饰符的 int 表示
Modifier.toString(1)
:根据访问修饰符的 int 值获取相对应的字符串表示
六. Method
在反射中 Method 一个实例代表一个类中的方法
创建方式
Class对象.getDecaredMethods()
:获取本类中所有的方法
Class对象.getDeclaredMethod(String name,Class<?> paramType)
:根据方法名称与参数列表获取本类中指定的方法
Class对象.getMethods()
:获取本类、父类、父接口中的所有方法
Class对象.getMethod(String name,Class<?> paramType)
:根据方法名称与参数列表获取本类
常用方法
getName()
:获取方法名
getParameterTypes()
:获取参数列表
getModifiers()
:访问修饰符
getReturnType()
:获取返回值类型
getExceptionTypes()
:获取异常类型
invoke(Object obj, Object paramValue)
:执行方法(方法的回调)
七. 注解
注解的定义
@Documented
:表示注解文档
public @interface Table{}
:表示注解类 定义注解,并不是 interface
@Target(value={ElementType.TYPE}
:表示作用范围,作用范围由ElementType指定,常用如下:
TYPE 表示作用在类上
FIELD 表示作用在字段上
METHOD 表示作用在方法上
PARAMETER 表示作用在参数列表上
CONSTRUCTOR 表示作用在构造方法上
@Retention(RetentionPolicy.RUNTIME)
:指定注解的生命周期,一共三种,通过 RetentionPolicy 定义,具体如下:
SOURCE 表示在源码中有效
CLASS 表示在字节码文件中有效(.class文件)
RUNTIME 表示在 JVM 运行时有效
:如果注解里面只有一个 value 属性,可以省略不写,默认就是 value=
注解的获取
Class对象.getAnnotation(Class annotationClass)
:获取类上的注解
Field对象.getAnnotation(Class annotationClass)
:获取字段上的注解
Method对象.getAnnotation(Class annotationClass)
:获取方法上的注解
创建方式