java核心-反射

概述

   动态获取程序信息以及动态调用对象的功能称为 java 语言的反射机制;得到编译以后的 class 文件对象,提供了一个 Class 类型,就是编译后的 class 类对象

反射常规开发流程

  • 类名.class
  • 对象.getClass
  • Class.forname(“类的全名”)
  • 使用类的加载器 ClassLoader

常用

Class api

有很多 api,只需要注常见的

方法名称作用
getName()获取 包名+类名
getSimpleName获取类名
getDeclaredConstructor(Class<?> … parameterTypes)根据参数,获取构造器,修饰符不影响
getDeclaredConstructors()获取全部声明的构造器,返回数组,修饰符不影响

总结

反射 api 很多,宏观分类

  • get+要获取的东西:获取属性getField()、获取方法为 getMethod()
    • 只能获取公有的
    • getMethod 可以获取本类及其父类的方法
  • get+Declared+获取的东西
    • 获取全部的东西
    • getDeclaredMethod只能获取到本类的方法

反射-创建对象

   通过获取构造器,都是为了创建对象,所以 Constructor 类主要用于创建对象,jdk9 后用构造器创建对象, class.getDeclaredConstructor().newInstance(),日常开发定义的 pojo 类里面,开发规范推荐显示的写出空构造函数,一是方便通过反射创建对象,二是子类 继承父类时,默认调用 super() 保证父类有空构造函数

方法和属性

通过 class 获取方法

方法说明
getReturnType获取全部的返回值
getParameterTypes()获取全部的参数
getModifiers()获取修饰符
getExceptionTypes获取异常信息

操作 Filed

方法说明
get(Object obj)获取指定对象 obj 上此 Field 的属性内容
set(Object obj,Object value)设置指定对象 obj 上此 Field 的属性内容

暴力操作

   如果反射进行相关操作,如构造器、方法、属性 没有权限怎么办?可以通过 setAccessible(true),修改访问权限。

invoke

运行类的指定方法步骤

  • 获取 class 对象,创建对象
  • 获取方法,invoke 调用
    • Object invoke (Object obj, Object …args)
    • 参数说明:obj是调用类的实例对象,args:调用方法的参数,是可变长度
    • Object 对应原方法的返回值,若原方法无返回值,此时返回 null
    • 如果原方法为静态方法,此时形参 obj 可为 null
    • 如果原方法形参列表为空,则args为null
    • 如果原方法声明为private,则需要在调用上 invoke 方法前,调用对象的 setAccsessible(true) 方法
  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流月up

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值