Java 反射学习笔记

反射,指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对任意一个对象,都能调用它的任意一个方法。这种动态获取信息,以及动态调用对象方法的功能,叫做 Java 语言的反射机制。

反射

指程序可以访问、检测和修改它本身状态或行为的一种能力
Java 通过字节码反射出类中的信息,包含:类、属性、方法、构造、继承、实现
在 JDK 中 java.lang包与 java.lang.reflect包下

一. Class 类

在反射中 Class 代表一个类,也叫类类型,是 Java 数据类型中的一种
创建方式
  1. Class.forName("完整路径")
  2. 类名.class
  3. 对象名.getClass()
常用方法
  1. getName():获取类的完整路径
  2. getSimpleName():获取类的名称
  3. newInstance():创建类的新实例,就是新对象

二. Java 中的数据类型(☆)

  1. 基本数据类型(8种)
  2. 引用类型(数组和对象)
  3. 枚举
  4. 类类型

三. Java 中创建对象方式(☆)

  1. new关键字
  2. 反序列化
  3. 反射
  4. 克隆

四. Constructor

在 Java 反射中 Constructor 的一个实例代表一个类的构造方法,可以通过类类型获取

创建方式
  1. class对象.getConstructors():获取所有的构造方法,返回一个构造方法数组
  2. class对象.getConstructor():获取指定构造方法
常用方法
  1. getName():获取构造方法的名称
  2. getParameterTypes():获取构造方法参数列表
  3. getModefiers():获取构造方法访问修饰符
  4. getExceptionTypes():获取构造方法的异常
  5. newInstance():根据指定的构造方法创建对象

五. Filed

在 Java 反射中 Filed 一个实例代表一个类中的属性

创建方式
  1. getDeclaredFields():获取本类中的所有属性,返回一个属性数组
  2. getDeclaredField(String name):根据名称获取本类中的单个属性
  3. getFields():获取父类、父接口中所有的 public 修饰的属性
  4. getField(String name):根据名称获取父类,父接口中的 public 修饰的属性
常用方法
  1. getName():获取属性名称
  2. getModifiers():获取属性访问修饰符
  3. getType():获取属性数据类型
  4. setAccessible(boolean b):设置私有变量的访问权限,默认为 false
  5. set(Object obj, Object value):给属性赋值
  6. get(Objuct obj):获取属性值
  7. getModifiers():获取该属性的访问修饰符的 int 表示
  8. Modifier.toString(1):根据访问修饰符的 int 值获取相对应的字符串表示

六. Method

在反射中 Method 一个实例代表一个类中的方法

创建方式
  1. Class对象.getDecaredMethods():获取本类中所有的方法
  2. Class&#x5BF9;&#x8C61;.getDeclaredMethod(String name,Class<?> paramType):根据方法名称与参数列表获取本类中指定的方法
  3. Class&#x5BF9;&#x8C61;.getMethods():获取本类、父类、父接口中的所有方法
  4. Class&#x5BF9;&#x8C61;.getMethod(String name,Class<?> paramType):根据方法名称与参数列表获取本类
常用方法
  1. getName():获取方法名
  2. getParameterTypes():获取参数列表
  3. getModifiers():访问修饰符
  4. getReturnType():获取返回值类型
  5. getExceptionTypes():获取异常类型
  6. invoke(Object obj, Object paramValue):执行方法(方法的回调)

七. 注解

注解的定义
  1. @Documented:表示注解文档
  2. public @interface Table{}:表示注解类 定义注解,并不是 interface
  3. @Target(value={ElementType.TYPE}:表示作用范围,作用范围由ElementType指定,常用如下:
  4. TYPE 表示作用在类上
  5. FIELD 表示作用在字段上
  6. METHOD 表示作用在方法上
  7. PARAMETER 表示作用在参数列表上
  8. CONSTRUCTOR 表示作用在构造方法上
  9. @Retention(RetentionPolicy.RUNTIME):指定注解的生命周期,一共三种,通过 RetentionPolicy 定义,具体如下:
  10. SOURCE 表示在源码中有效
  11. CLASS 表示在字节码文件中有效(.class文件)
  12. RUNTIME 表示在 JVM 运行时有效

注:如果注解里面只有一个 value 属性,可以省略不写,默认就是 value=

注解的获取
  1. Class&#x5BF9;&#x8C61;.getAnnotation(Class annotationClass):获取类上的注解
  2. Field&#x5BF9;&#x8C61;.getAnnotation(Class annotationClass):获取字段上的注解
  3. Method&#x5BF9;&#x8C61;.getAnnotation(Class annotationClass):获取方法上的注解

Original: https://www.cnblogs.com/xiqingbo/p/java-21.html
Author: Schieber
Title: Java 反射学习笔记

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/598696/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球