ClassNotFoundException存储自己的cause副本

时间:2013-01-22 18:51:26

标签: java classnotfoundexception standard-library

我有Oracle的Java实现(1.6.0_37),我对ClassNotFoundException源代码很感兴趣。如果您查看它,您将看到此类存储它自己的原因副本:

private Throwable ex;

我只是没有看到任何意义 - 它与Throwable类中声明的字段完全相似。

有没有人可以解释一下为什么Java类库开发人员决定这样做?

2 个答案:

答案 0 :(得分:2)

可能是因为没有人想过要删除它。

cause已添加到JDK 1.4中的Throwable; 1.3没有出现。

然而,ClassNotFoundException版本的{{1}}确实有原因,因为当静态初始化程序失败(实际上,由于任何加载问题)时会发生此异常,并且在不知道原因的情况下进行调试非常令人沮丧。

答案 1 :(得分:1)

可能他们希望向后兼容使用旧Java版本序列化的异常对象。 保持该字段似乎比维护自定义writeObject / readObject方法更简单。