当前位置: 首页 > 面试题库 >

Java:什么情况需要使用反射?

梁丘安晏
2023-03-14
问题内容

因此,通过阅读一些文章,我得到的信息是能够实时修改字段并为类设置值,而无需重新编译。

所以有可能对没有源代码的第三方Java库创建的类执行此操作/是否可以在运行时使用反射来修改类实例?

在其他哪些情况下,通常还会使用反射?

我试图了解反射如何适用。


问题答案:

任何时候您在运行时处理字符串,并希望将该字符串的一部分视为语言中的标识符。

  1. 远程过程调用-将通过网络接收的消息的一部分视为方法名称。
  2. 序列化和反序列化-将字段名称转换为字符串,以便您可以将对象的字段写入流,然后再将其转换回对象。
  3. 对象关系映射-维护对象中的字段与数据库中的列之间的关系。
  4. 具有动态类型的脚本语言的接口-将脚本语言产生的字符串值转换为对对象上的字段或方法的引用。

它也可以用于允许以语言模拟语言功能。考虑java com.example.MyClass将字符串转换为类名的命令行。这不需要反射,因为java可执行文件可以将.class文件转换为代码,但是如果没有反射,它将无法在其参数的委托写入java com.example.Wrapper com.example.MyClass位置Wrapper,如下所示:

class Wrapper {
  public static void main(String... argv) throws Exception {
    // Do some initialization or other work.
    Class<?> delegate = Class.forName(argv[0]);
    Method main = delegate.getMethod("main", String[].class);
    main.apply(null, Arrays.asList(argv).subList(1, argv.length).toArray(argv));
  }
}


 类似资料:
  • 序列化就是一种用来处理对象流的机制。将对象的内容流化,将流化后的对象传输于网络之间。 序列化是通过实现serializable接口,该接口没有需要实现的方法,implement Serializable只是为了标注该对象是可被序列化的,使用一个输出流(FileOutputStream)来构造一个ObjectOutputStream对象,接着使用ObjectOutputStream对象的writeO

  • 本文向大家介绍什么是 Java 序列化?什么情况下需要序列化?相关面试题,主要包含被问及什么是 Java 序列化?什么情况下需要序列化?时的应答技巧和注意事项,需要的朋友参考一下 Java 序列化是为了保存各种对象在内存中的状态,并且可以把保存的对象状态再读出来。 以下情况需要使用 Java 序列化: 想把的内存中的对象状态保存到一个文件中或者数据库中时候; 想用套接字在网络上传送对象的时候; 想

  • 本文向大家介绍什么情况下需要创建MySQL索引?,包括了什么情况下需要创建MySQL索引?的使用技巧和注意事项,需要的朋友参考一下 索引可以提高数据的检索效率,也可以降低数据库的IO成本,并且索引还可以降低数据库的排序成本。排序分组操作主要消耗的就是CPU资源和内存,所以能够在排序分组操作中好好的利用索引将会极大地降低CPU资源的消耗。 如何判定是否需要创建索引? 1、较频繁地作为查询条件的字段

  • 当对部署/实时应用程序进行任何更改时,我们需要“重启”JBoss服务器的情况是什么? 即 -如果只是热交换一些(. js/. css/. jsp)文件完成。 -如果一些类被替换。 -如果我替换完整的. war文件。 ...等等。

  • 请问我们在使用类型注释的时候,何时使用type class名,何时使用class名呢? 我经过如下实验: 比如以上,是否是返回类型为class名称的时候,使用 typeof class名,返回类对象的时候,使用class名?

  • 问题内容: 我已经看到我们可以拥有复合键,其中主键由两个表的组合主键组成。 喜欢的人和书 但我想问的是,我们需要对编程语言进行硬编码 我的意思是可以,我可以有任意名称的单独列作为主键,然后我不必对其进行硬编码,并且可以像平常一样执行我的功能 问题答案: 在“新”应用程序中不应考虑使用组合键。过去,曾经有人认为“业务密钥”比“代理密钥”更好。 编辑:按照克里斯的要求,我正在扩大答案。 首先,我要说明