因此,每本Java教科书都讨论Java的灵活性,因为Java可以在运行时加载类。只需将字符串拼凑在一起,然后交给Class.forName(),然后抓住ClassNotFoundException并处理即可。理论上就这么多。
Class.forName()
ClassNotFoundException
您能否举例说明如何使用Java类加载来实现原本不可能或不容易的功能?请注意,我 不是 问“有什么伟大的事情 可以 做什么?” -我正在寻找真实的示例,它是一个开源应用程序,或者-如果您可以在不给出过多细节的情况下进行描述-一个专有应用程序。
编辑: 当然,VM会根据需要延迟加载类。只要我确定我将永远需要的所有类都在那里,那便是幕后的事情。我该如何处理ClassNotFoundException?假设我写了十页的文本,但是PrinterDriver找不到该类。
PrinterDriver
首先想到插件。与C ++之类的语言相比,Java类的加载使其非常容易。
您可能没有意识到的一点是,任何Java虚拟机都严重依赖内部的类加载。每次字节码解释器看到某个方法的引用时,它都会检查该方法所属的类是否已加载,如果尚未加载,则Class.forName()在解析该方法之前使用后面的相同机制加载该类。这种机制非常强大,因为任何Java应用程序实际上都可以充当一组可动态加载的可替换组件。如果VM编写正确,则它可以例如通过自定义类加载器加载类,该类加载器从网络获取类而不是常规文件。
类的加载时间取决于虚拟机的实现,但是大多数依赖于这种后期绑定机制,该机制在VM首次遇到该类时就加载一个类。