我有一个继承了Exception的类,因此必须是Serializable的。这个异常类包含一个不可序列化的字段,因此我考虑将它设为Transient。我的理解是这样做会导致如果我的类被存储,该字段无法被恢复。在程序执行期间,什么时候会对我的异常进行序列化/反序列化?(注:据我所知,我没有将它们写入数据库或文件中)。
我有一个继承了Exception的类,因此必须是Serializable的。这个异常类包含一个不可序列化的字段,因此我考虑将它设为Transient。我的理解是这样做会导致如果我的类被存储,该字段无法被恢复。在程序执行期间,什么时候会对我的异常进行序列化/反序列化?(注:据我所知,我没有将它们写入数据库或文件中)。
transient
的字段不被视为对象状态的一部分,当对象被序列化时故意省略它们,并且在对象再次反序列化时不会恢复它们。序列化发生在您想要将对象及其状态存储在磁盘上或通过网络发送对象时。据我所知,在正常程序执行期间不会发生序列化,除非您明确告诉程序这样做。您可以定义writeObject抛出UnsupportedOperationException或NotSerializableException,以确保此对象永远不会被序列化。
如果您的异常中有瞬态字段,那么当对象被序列化/反序列化时,这些瞬态字段将无法被恢复。
然而,在小型应用程序中,如果您不自己序列化异常,那么您很可能不需要进行序列化/反序列化。但是请注意,如果您使用任何“神奇”的框架、JNDI或任何集群环境,则需要格外小心。