java transient 应用场景_关于java:transient关键字的用途是什么以及何时使用它?...

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:

what does the keyword"transient" means in java?

我在Java中阅读了关于EDCOX1×0的关键字。我理解的是什么?它被用于田野。如果声明transient关键字,该字段将不会序列化。可序列化何时发生在Java的字段中?.如果不扩展Serializable接口,会发生什么情况?如果我说错了请纠正我。这个问题可能是重复的。

坎南

因此,您不必搜索,只需添加免责声明"此问题可能重复。"

他知道术语瞬态,但他想再次确认"如果类不扩展可序列化,那么瞬态就没有任何意义"。这一事实在任何地方都没有明确提及。+ 1

我在Java中搜索了瞬态,并阅读了关于StAcExpLoad中的瞬态问题。对不起,我看完后不清楚。

@我就是这么说的,支持你的问题,甚至反对它。

您可以将其用于要从序列化中排除的字段。序列化仅适用于类层次结构中的类或类实现接口的类。例如,java.lang.Throwable实现java.io.Serializable,因此所有错误和异常都继承该标记接口。

当您希望将对象从Java堆转移到平面文件或网络上时,需要进行序列化;基本上,每当对象需要从JVM中取出时,都需要以某种方式存储,以便可以重新创建。

因此,如果在序列化之后再次创建对象时,您认为不需要填充任何变量,那么您可以将其声明为瞬态变量。例如物体上的温度。我们知道,如果我们以任何方式重新创建对象,那么当前的温度没有任何意义,那么为什么要在序列化过程中对其进行序列化。

只有在我扩展Serializable时才需要,对吗?。用于将对象存储在文件或网络中供以后使用。

@是的,你是对的。

序列化对象时,使用ObjectOutputStream来"写下来",使用ObjectInputStream来"读回来"。

通常,Java实现的默认行为对于串行化的许多"常用"来说是足够好的。transient关键字告诉JVM您不希望它保存(或恢复)变量的值。在处理transient变量时应该格外小心:在还原序列化实例之后,这些变量可能为空或具有不一致的值。最好将添加到可序列化类中

private void writeObject(java.io.ObjectOutputStream out) throws IOException{

out.defaultWriteObject();

}

private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException{

in.defaultReadObject();

//here do something to re-initialize transient variables

}

通过这种方式,您可以为所有声明的瞬态插入一个特殊的处理。(请记住,只有在第一次使用可序列化类的构造函数时才调用它,而不是在从ObjectInputStream中读取对象时调用它)

在任何其他不涉及序列化的上下文中,transient并不意味着什么。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值