【问题标题】:ClassNotFoundException stores own copy of causeClassNotFoundException 存储自己的原因副本
【发布时间】:2013-01-22 18:51:26
【问题描述】:
我有 Oracle 的 Java 实现 (1.6.0_37),我对 ClassNotFoundException 源代码感兴趣。如果你查看它,你会看到这个类存储了它自己的原因副本:
private Throwable ex;
我只是看不出有任何意义——它与Throwable 类中声明的字段完全相似。
谁能解释一下为什么 Java 类库开发人员决定这样做?
【问题讨论】:
标签:
java
classnotfoundexception
standard-library
【解决方案1】:
可能是因为没有人想删除它。
cause 被添加到JDK 1.4 中的Throwable;它不在1.3 中。
但是,ClassNotFoundException 的 1.3 版本确实有原因,因为当静态初始化程序失败时(实际上,由于任何加载问题),可能会发生此异常,并且在不知道原因的情况下进行调试可能会非常令人沮丧。
【解决方案2】:
他们可能希望向后兼容使用旧 Java 版本序列化的异常对象。
保留字段似乎比维护自定义 writeObject/readObject 方法更简单。