Java反射

动态语言

程序运行时可改变其结构,比如常见的 JavaScript,Python 等,从反射角度来说 Java 属于半动态语言。

概念

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

应用场景

程序需要在运行时发现对象和类的信息,为了避免在编译时无法预知对象和类属于哪些类。

API

  • Class 类:反射的核心类,可以获取类的属性,方法等信息。
  • Field 类:Java.lang.reflec 包中的类,表示类的成员变量,可以用来获取和设置类中的属性值。
  • Method 类:Java.lang.reflec 包中,表示类的方法,可以获取类中的方法信息或者执行方法。
  • Constructor 类:Java.lang.reflec 包中,表示类的构造方法。

反射使用

  • 获取想要操作的 Class 对象
    • 调用某个对象的 getClass() 方法
    • 调用某个类的 class 属性获取该类的 Class 对象
    • 使用 Class 类中的 froName() 静态方法(常用)
  • 调用 Class 类中的方法
  • 使用反射 API 操作

创建对象

  • 使用 Class 对象的 newInstance() 方法创建该 Class 对象的实例,要求Class 对象有默认的空构造方法
  • 使用 Constructor 对象的 newInstance() 方法
// 获取 Person 的 Class 对象
Class clas = Class.forName("com.Person");
// 使用 .newInstance() 创建对象
Person p = (Person) clas.newInstance();
// 获取构造方法并创建对象
Constructor c = clas.getDeclaredConstructor(String.class, String.class, int.class);
// 创建对象并设置属性
Person p1= (Person) c.newInstance("张三", "男", 20);

反射常用方法

  • getDeclaredConstructors:返回类的所有构造方法
  • getModifiers:获取构造方法的类型
  • getParameterTypes:获取构造方法的所有参数
  • getDeclareConstructor(参数类型.class):获取指定参数类型的构造方法
  • method.getDeclaredMethod(方法名,参数类型):获取指定方法
  • 通过 method.invoke(类的实例,方法参数) 执行方法
  • getDeclaredField(字段名):获取指定字段

反射工具类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一起来搬砖呀

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

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

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

打赏作者

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

抵扣说明:

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

余额充值