2016-06-21 40 views
0

在努力学习有关Java类加载器从Wikipedia,我想我能明白他们为什么有三大类加载器:Java类加载器的复杂性

1)引导类加载器
2)扩展类加载器
3 )系统类加载程序

他们继续说你可以定义你自己的类加载器。我不知道我看到在定义自己的价值,但是从Wikipedia以下报价真让我怀疑:

最复杂的JAR地狱问题出现在需要的全部复杂性的 优势的情况下类加载系统。 Java 程序不需要仅使用单个“平坦”类加载器,而是可以由几个(可能非常多)嵌套的,合作类​​加载器组成 。由不同的类加载器加载的类可能会以复杂的方式进行交互,但开发人员无法完全理解,导致错误或难以分析,解释和解决的错误。


如果这是如此复杂,为什么要打扰呢?这三个已经定义好的类加载器不够吗?

(是的,对于那些好奇,我没有碰上一个ClassCastException,我不认为应该发生的,就像图形标记Figure 2. Class identity crisis。我想了解的背景就是一切。)

回答

1

某些用例需要自定义类加载器。 几个例子:

  • 动态添加新的文件夹/罐子可加载。 (无需重新启动整个应用程序)。
  • 动态删除可加载的文件夹/罐子。
  • 用javassist生成运行时字节码。
  • 多个(实际同时使用)同一应用程序中相同类的多个版本/ jvm