因此,每本Java教科书都讨论了Java的灵活性,因为它可以在运行时加载类.只需拼凑一个字符串并将其交给它Class.forName(),然后抓住ClassNotFoundException并处理它.这个理论太多了.
您能举例说明您是如何使用Java类加载来实现一个本来不可能或不容易的功能的吗?请注意,我不是问"有什么伟大的事情可以做什么?" - 我正在寻找真实世界的例子,无论是开源应用程序还是 - 如果你能够在不提供太多细节的情况下描述它 - 一个专有的应用程序.
编辑:当然,VM会根据需要懒惰地加载类.只要我确信我所需要的所有课程都在那里,这就是幕后的事情.我该怎么处理ClassNotFoundException?假设我写了十页文本,并且PrinterDriver找不到该课程.
Gnu*_*rou 10
插件是第一个浮现在脑海中的东西.与C++之类的语言相比,Java类加载使其变得非常容易.
您可能不知道的一点是,任何Java虚拟机都在很大程度上依赖于内部的类加载.每当字节码解释器看到对方法的引用时,它就会检查方法所属的类是否已经加载,如果不加载,则Class.forName()在解析方法之前使用完全相同的机制加载它.这种机制非常强大,因为任何Java应用程序都真正充当一组可动态加载的可替换组件.如果VM写得很好,它可以通过自定义类加载器加载类,该加载器从网络中取代类而不是常规文件.
类加载时间取决于虚拟机实现,但大多数依赖于这种后期绑定机制,该机制在VM第一次遇到它时加载类.
"PLUGIN",这就是大字.
基本上,您可以在编写和编译程序时加载一个您不知道何时或不存在的类.
例如,如果您希望程序进行拼写检查,则可以编写一个接口,SpellChecker然后从实现该SpellChecker接口的配置文件中加载一个类.之后,您可以编写任何SpellChecker并在配置文件中设置实际文件名.这样,您的程序不需要知道哪个类将执行拼写检查.
数据库驱动程序,Eclipse的插件,脚本语言,加密方法都是以这种方式完成的,因为原始编写者不知道(在某些情况下,不知道)将实际使用哪个类.
希望这可以帮助.
应用服务器还严重依赖于ClassLoaders隔离不同的已部署模块.例如
感谢类加载器的魔力......
| 归档时间: |
|
| 查看次数: |
1749 次 |
| 最近记录: |