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

人们使用类加载做什么?

戴博
2023-03-14
问题内容

因此,每本Java教科书都讨论Java的灵活性,因为Java可以在运行时加载类。只需将字符串拼凑在一起,然后交给Class.forName(),然后抓住ClassNotFoundException并处理即可。理论上就这么多。

您能否举例说明如何使用Java类加载来实现原本不可能或不容易的功能?请注意,我 不是 问“有什么伟大的事情 可以 做什么?”
-我正在寻找真实的示例,它是一个开源应用程序,或者-如果您可以在不给出过多细节的情况下进行描述-一个专有应用程序。

编辑:
当然,VM会根据需要延迟加载类。只要我确定我将永远需要的所有类都在那里,那便是幕后的事情。我该如何处理ClassNotFoundException?假设我写了十页的文本,但是PrinterDriver找不到该类。


问题答案:

首先想到插件。与C ++之类的语言相比,Java类的加载使其非常容易。

您可能没有意识到的一点是,任何Java虚拟机都严重依赖内部的类加载。每次字节码解释器看到某个方法的引用时,它都会检查该方法所属的类是否已加载,如果尚未加载,则Class.forName()在解析该方法之前使用后面的相同机制加载该类。这种机制非常强大,因为任何Java应用程序实际上都可以充当一组可动态加载的可替换组件。如果VM编写正确,则它可以例如通过自定义类加载器加载类,该类加载器从网络获取类而不是常规文件。

类的加载时间取决于虚拟机的实现,但是大多数依赖于这种后期绑定机制,该机制在VM首次遇到该类时就加载一个类。



 类似资料:
  • 问题内容: 从Java 5开始,我们已经对原始类型进行装箱/拆箱,因此将其包装为,依此类推。 我最近看到许多新的Java项目(肯定要求JRE的版本至少为5,如果不是6的话)正在使用int而不是,尽管使用后者要方便得多,因为它具有一些用于转换的辅助方法到long的值等。 为什么有些人仍然在Java中使用原始类型?有什么切实的好处吗? 问题答案: 在Joshua Bloch的有效Java条款 5:“避

  • 问题内容: 在Java中,嵌套类是什么,它们做什么? 问题答案: 它们只是其他类中的类。它们使类的层次结构成为可能,如果您将它们设为私有,则这是一种使用它们封装不在类外部公开的数据的便捷方法。Sun有一个简短的教程关于他们

  • 问题内容: 我们知道我们可以使用以下方法覆盖System 类加载器: 那么,既然它本身是一个类,它是由谁加载的? 我们如何获得该“元”类加载器的类文件? 问题答案: 从Javadoc中获取: 如果在首次调用此方法时定义了系统属性“ java.system.class.loader”,则该属性的值将作为要作为系统类加载器返回的类的名称。 该类使用默认的系统类加载器加载, 并且必须定义一个公共构造函数

  • 问题内容: 我曾多次争论使用并不是一种不好的做法。是的,我知道争论。布洛赫说这很糟糕。他确实做到了,但是他说实施是不好的。另一方面,使用克隆,尤其是如果由受信任的库(例如JDK)正确实现了克隆,则可以。 就在昨天,我讨论了我的一个答案,该讨论仅表明使用for 是可以的(我猜没有基于这个原因的支持)。 如果查看的,我们会看到一个熟悉的名字-Josh Bloch。因此,在(和其他收藏品)是完全正常的(

  • 本文向大家介绍为什么人们会犹豫使用微服务?相关面试题,主要包含被问及为什么人们会犹豫使用微服务?时的应答技巧和注意事项,需要的朋友参考一下 我见过许多开发者在这个问题上摸索。毕竟,在面试微服务架构师角色时,他们会被问到这个问题,所以承认它的缺点可能有点棘手。以下是一些很好的答案: 它们需要大量协作 - 微服务需要大量的合作。不同的微服务模块,可能分散在不同的团队,团队之间需要始终保持良好的同步。

  • 为了给出基本的思想,下面是所涉及的代码的样子: 方法处理按钮操作,位于根布局控制器中: 它填充一个可观察的列表,该列表随后传递给第二个page控制器,以便在表视图中显示它们。显示此视图并设置每件事的方法如下: