反射——学习笔记

目录

反射(是设计框架的灵魂)

一、框架:半成品软件。可以在框架的基础上进行软件开发,简化代码。

二、反射概念:将类的各个组成部分封装为其他对象,也称为反射机制。

	使用反射好处:
	1、在**程序运行过程中**,操作这些对象。
	2、解耦,提高程序的可拓展性。

三、获取Class对象三种方式
1、Class.forName(“全类名”):将字节码文件加载进内存,返回Class对象。(多用于配置文件,将类名定义在配置文件中。读取文件,加载类)

2、类名.class:通过类名的属性class获取。(多用于参数传递)

3、对象.getClass():getClass()方法在Object类中定义着。(多用于对象的获取字节码的方式)

结论
同一个字节码文件(*.class)在一次程序运行过程中,只会被加载一次,不论通过哪一种方式获取的class对象都是同一个。

四、Class对象功能
1、获取功能
  a、获取成员变量:
    Field[] getFields​() ——获取所有public修饰的成员变量
    Field getField​(String name)

    Field[] getDeclaredFields​() ——获取所有的成员变量 不考虑修饰符
    Field getDeclaredField​(String name)

  b、获取构造方法:
    Constructor<?>[] getDeclaredConstructors​()
    Constructor getDeclaredConstructor​(Class<?>…parameterTypes)

    Constructor<?>[] getDeclaredConstructors​()
    Constructor getDeclaredConstructor​(Class<?>…parameterTypes)

  c、获取成员方法:
    Methods[] getMethods​()
    Methods getMethod​(String name, Class<?>…parameterTypes)

    Methods[] getDeclaredMethods​()
    Methods getDeclaredMethod​(String name, Class<?>…parameterTypes)

  d、获取类名:
    String getName()

2、获取值后可进行操作
  a、Field:成员变量 操作
    1、设置值
      void set(Object obj, Object value)
    2、获取值
      get(Object obj)
    3、忽略访问权限修饰符的安全检查
      setAccessible(true)——暴力反射

  b、Constructor:构造方法 操作
    1、创建对象
      a、T newInstance​(Object… initargs)
      b、若使用空参数构造方法创建对象,操作可以简化:Class对象的newInstance方法
    2、忽略访问权限修饰符的安全检查
      setAccessible(true)——暴力反射

  c、Method:成员方法 操作
    1、执行方法
      Object invoke(Object obj, Object… args)
    2、获取方法名称
      String getName——获取方法名
    3、忽略访问权限修饰符的安全检查
      setAccessible(true)——暴力反射

案例
需求
  写一个“框架”,可以帮我们创建任意的对象,并执行其中任意方法。

实现
  1、配置文件
  2、反射

详细步骤
  1、将需要创建的对象的全类名和需要执行的方法定义在配置文件中
  2、在程序中加载读取配置文件
  3、使用反射技术来加载类文件进行内存
  4、创建对象
  5、执行方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值