Java反射

用户国营  金牌会员 | 2024-7-7 00:48:43 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 869|帖子 869|积分 2607

Java反射是一个强大的特性,它答应程序在运行时查询、访问和修改类、接口、字段和方法的信息,以及创建和利用对象。反射的核心类位于java.lang.reflect包中。
以下是Java反射的一些常见用法:
1. 获取Class对象

每个类都有一个Class对象,它包含了与类相干的信息。可以通过以下方式获取:
  1. Class<?> clazz = MyClass.class; // 直接使用.class
  2. Class<?> clazz = someObject.getClass(); // 通过实例对象
  3. Class<?> clazz = Class.forName("MyClass"); // 通过类的全名字符串
复制代码
2. 访问类属性

利用Class对象可以获取类的属性(字段):
  1. Field[] fields = clazz.getDeclaredFields(); // 获取类的所有字段,包括私有字段
  2. Field field = clazz.getField("fieldName"); // 获取类的一个公共字段
复制代码
3. 访问类方法

利用Class对象可以获取类的方法:
  1. Method[] methods = clazz.getDeclaredMethods(); // 获取类的所有方法,包括私有方法
  2. Method method = clazz.getMethod("methodName", paramTypes); // 获取一个公共方法
复制代码
4. 创建对象实例

利用Class对象可以创建类的实例:
  1. MyClass obj = clazz.newInstance(); // 使用无参构造函数创建实例(已过时)
  2. MyClass obj = clazz.getDeclaredConstructor().newInstance(); // 使用无参构造函数创建实例
  3. MyClass obj = clazz.getConstructor(paramTypes).newInstance(params); // 使用带参数的构造函数创建实例
复制代码
5. 访问和修改字段值

利用Field对象可以访问和修改对象的字段值:
  1. Field field = clazz.getDeclaredField("fieldName");
  2. field.setAccessible(true); // 确保可以访问私有字段
  3. Object value = field.get(obj); // 获取字段值
  4. field.set(obj, newValue); // 设置字段值
复制代码
6. 调用方法

利用Method对象可以调用对象的方法:
  1. Method method = clazz.getMethod("methodName", paramTypes);
  2. Object result = method.invoke(obj, params); // 调用方法并获取返回值
复制代码
注意事项


  • 反射可能导致性能下降,由于它必要在运行时举行类型检查和解析。
  • 反射可能会破坏封装性,由于它可以访问私有的字段和方法。
  • 利用反射时,必要处理IllegalAccessException、InvocationTargetException和NoSuchMethodException等异常。
反射是一个高级特性,通常用于框架计划、动态代理、单元测试等场景。在实际开发中,应该谨慎利用,以避免潜在的问题。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

用户国营

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表