反射

本文深入解析Java反射机制,包括反射的基本概念、四种核心API、创建Class对象的三种方法及调用构造方法、普通方法和操作属性的具体步骤。同时探讨反射与封装性的关系,展现其在动态加载类方面的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java的一种强大机制——反射

介绍
  • 反射是一种机制,利用该机制可以在程序运行过程中对类进行解剖并操作类中的方法,属性,构造方法等成员

  • 简单的说反射就是调用 、构造方法、普通方法、属性字段的另外一种方式。最终的调用效果和普通调用方式是一样的
    有关反射的四个API

  • java.lang.Class

  • java.lang.reflect.Constructor

  • java.lang.reflect.Method

  • java.lang.reflect.Field在这里插入图片描述
    三种创建Class对象的方法

  • 类名.class

  • 对象.getClass()

  • Class.forName(“类的全限定类名”) 包名+类名
    获取Constructor对象方法举例

  • getConstructor(Class… argTypes)
    返回值:public类型的Constructor,返回的是public的,获取的也必须是public修饰的构造方法
    参数:构造方法的参数类型,设User的一个构造方法为:

   public  User(String name)  {this.name=name}

这里的参数类型就是String.class
注意:如果定义的是int类型就必须用int.class 不能用Integer.class ,多个参数用逗号隔开

  • getDeclaredConstructor(Class… argTypes)
    返回值:任意类型的Constructor,可以获取任意修饰类型的构造方法如private
    参数同上
    注意:如果要反射操作无权限的(private修饰的)Constructor,必须提前设置允许暴力反射:
    constructor.setAccessible(true)

    扩展: Constructor对象提供了一个获取对象实例的方法:
    newInstance(Object… argValues)
    参数:构造方法的参数
    返回值:类实例对象Object
    反射调用普通方法

  • getMethod(String name, Class… argTypes)
    参数:name:方法名,argTypes:方法的参数类型
    返回值:public类型的Method

  • getDeclaredMethod(String name, Class… argTypes)
    参数:name:方法名称,argTypes:方法的参数类型
    返回值:任意类型的Method
    扩展:Method对象提供了方法:
    invoke(Object target, Object… values)
    参数:target:执行哪个对象的方法,values:方法的实参值
    返回值:方法返回值
    注意:如果要反射操作无权限的Method,必须提前设置允许暴力反射:
    method.setAccessible(true)
    反射操作属性(字段)

  • getField(name)
    参数:属性字段的名称
    返回值:public类型Field

  • getDeclaredField(name)
    参数:属性字段的名称
    返回值:任意类型Field
    注意:如果要反射操作无权限的Field,必须提前设置允许暴力反射:
    field.setAccessible(true)

以上只是API简单的介绍,具体有哪些方法可以查看API

反射与封装性

封装是静态加载类:编译时刻加载类,表示在编译时刻就需要加载所有的可能使用到的类。
反射是动态加载类:jvm运行时刻加载类。
简单举个栗子:使用new创建一个对象,我们在运行程序的时候,该对象的类必须存在,否则会产生编译错误,这种方式就是静态加载类。如果使用了Object obj = Class.forName(“xxx”)来创建实例,只有在运行时候,该类不存在时,才会抛出异常,这种方式就是动态加载类。
反射是框架的灵魂,突出了OOP(面向对象)语言中一个重要的编程思想:万事万物皆对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值