反射(Class、Field、Method、Constructor)_嘘嘘喵

嘘嘘喵 社区会员 2021-10-26 22:56:28

摘要:反射(Class、Field、Method、Constructor)
#10.26

学习内容

反射

将类的各个组成部分封装为其他对象的过程叫反射。

好处

  1. 可以在程序运行中操作这些对象
  2. 可以解耦,提高程序的可扩展性

Class 对象

获取 Class 对象的三种方式

  1. 类名.class

    多用于参数的传递。

  2. 对象名.getClass()

    多用于对象的获取字节码。

  3. Class.forName(类的全名)

    多用于配置文件

Class 对象的功能

  1. 获取成员变量
    1. Field[] getFields() :获取所有 public 修饰的成员变量。
    2. Field getField(String fieldName) :获取指定的,public 修饰的成员变量。
    3. Field getDeclaredFields() :获取所有的成员变量,不考虑修饰符。
    4. Field getDeckaredField(String fieldName) :获取指定的成员变量,不考虑修饰符。
    5. setAccessible(true) :将访问权限打开,打开之后可以忽略修饰符的安全检查,从而访问所有修饰符修饰的字段,也称暴力反射。
  2. 获取构造方法
    1. Constructor<?>[] getConstructors() :获取所有的 public 构造器。
    2. Constructor<?>[] getDeclaredConstructors() :获取所有的构造器。
    3. Constructor<T> getConstructor(类<?>... parameterTypes) :获取指定的,public 修饰的构造器。
    4. Constructor<T> getDeclaredConstructor(类<?>... parameterTypes) :获取指定的构造器,不考虑修饰符。
  3. 获取成员方法
    1. Method[] getMehods() :获取所有的 public 方法。
    2. Method[] getMehod(String name, 类<?>... parameterTypses) : 获取指定的的 public 方法。
    3. Method[] getDeclaredehods() :获取所有方法。
    4. Method[] getDeclaredMehod(String name, 类<?>... parameterTypses)
  4. 执行获取的成员方法
    1. (Method 对象).invoke(实例对象);

Field:成员变量

  • 操作:

    1. 设置值
    • void set(Object obj, Object value)
    1. 获取值
    • get(Object obj)
    1. 忽略访问权限修饰符的安全检查
    • setAccessible(true) :暴力反射

Constructor:构造方法

  • 创建对象:
    • T newInstance(Object... initargs)
    • 如果使用空参数构造方法创建对象,操作可以简化:Class 对象的 newInstance 方法

Method :方法对象

  • 执行方法:

    • Object invoke(Object obj, Object... args)
  • 获取方法名称:

    • String getName:获取方法名

工作内容

这个任务没搞完,明天搞完了一起放上来。

明日计划

  1. 把反射的任务搞完
  2. 注解
...全文
153 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
湘王 2021-10-27
  • 打赏
  • 举报
回复
的加快进度了

110

社区成员

发帖
与我相关
我的任务
社区描述
训练、训练、训练!
其他 其他
社区管理员
  • 实训001
  • 非鱼up
  • andy421
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

自律训练,自信挑战!

试试用AI创作助手写篇文章吧