1

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

private Throwable ex;

我只是看不出它有什么意义——它与Throwable类中声明的字段完全相似。

谁能解释一下为什么 Java 类库开发人员决定这样做?

4

2 回答 2

2

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

cause添加到ThrowableJDK 1.4中;它不存在于1.3中。

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

于 2013-01-22T18:57:10.867 回答
1

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

于 2013-01-22T19:18:26.247 回答