Java反射机制学习记录

什么是反射?

反射(Reflection)是Java语言的一项强大功能,允许程序在运行时动态地获取关于类、方法和属性的信息,并且能够在运行时操作这些成员。通过反射,程序可以在编译时不知道的情况下发现和使用类的成员,这是Java的一种元编程技术。

获取类对象的三种方式

// 通过对象获取
Class<?> clazz1 = obj.getClass();

// 通过类名获取
Class<?> clazz2 = MyClass.class;

// 通过全限定类名获取
Class<?> clazz3 = Class.forName("com.example.MyClass");

反射的核心类

反射的主要类和接口在java.lang.reflect包中,包括以下几个核心类:

  1. Class:代表一个类或接口。
  2. Field:代表类的一个成员变量。
  3. Method:代表类的一个成员方法。
  4. Constructor:代表类的一个构造方法。

获取构造方法并创建实例

// 获取无参构造方法
Constructor<?> constructor = clazz.getConstructor();
MyClass myObject = (MyClass) constructor.newInstance();

// 获取有参构造方法
Constructor<?> constructor = clazz.getConstructor(String.class);
MyClass myObject = (MyClass) constructor.newInstance("example");

获取并调用方法

// 获取方法
Method method = clazz.getMethod("methodName", String.class);

// 调用方法
Object result = method.invoke(myObject, "argument");

获取并操作字段

// 获取字段
Field field = clazz.getField("fieldName");

// 获取字段值
Object value = field.get(myObject);

// 设置字段值
field.set(myObject, "newValue");

反射的优缺点

优点
  1. 灵活性:可以在运行时操作类和对象,适应动态变化的需求。
  2. 框架和工具开发:许多框架(如Spring)利用反射来实现依赖注入、AOP等功能。
缺点
  1. 性能开销:反射操作比直接调用要慢,因为涉及动态解析。
  2. 安全问题:可能违反访问控制检查,访问私有成员可能导致不安全操作。
  3. 代码复杂性:反射代码相对复杂,容易出错且难以维护。
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值