人们使用类加载做什么?

2022-09-03 00:15:40

因此,每本Java教科书都谈到了Java的灵活性,因为它可以在运行时加载类。只需拼凑一根绳子,然后把它交给 ,然后抓住并处理它。对于理论来说,这么多。Class.forName()ClassNotFoundException

您能举例说明您如何使用Java类加载来实现一个本来不可能或容易实现的功能吗?请注意,我不是在问我们能做哪些伟大的事情?”-我正在寻找真实世界的例子,无论是开源应用程序还是-如果您可以在不给出太多细节的情况下描述这一点-专有应用程序。

编辑:当然,VM 会根据需要懒惰地加载类。这是一个幕后的事情,只要我确信我需要的所有课程都在那里。我该如何处理 ?假设我已经写了十页的文字,但找不到这个类。ClassNotFoundExceptionPrinterDriver


答案 1

插件是想到的第一件事。与C++等语言相比,Java类加载使它变得非常容易。

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

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


答案 2

“插件”,这是一个大词。

基本上,您可以加载一个在编写和编译程序时不知道或不存在的类。

例如,如果您希望程序执行拼写检查,则可以编写一个接口,然后从实现该接口的配置文件中加载一个类。之后,您可以编写任何拼写检查器并在配置文件中设置实际的文件名。这样,您的程序就不需要知道哪个类将执行拼写检查。SpellCheckerSpellChecker

DB驱动程序,Eclipse的插件,脚本语言,加密方法都是以这种方式完成的,因为原始编写者不知道(在某些情况下,也不知道)实际将使用哪个类。

希望这有帮助。


推荐