瞬态关键字将用于防止特定变量的序列化。但是为什么我们不应该序列化数据呢?有内部安全感吗?
有些类本质上是不可序列化的,因为它们表示Manage Java环境之外的资源。例如,a
FileOutputStream
不能真正序列化,因为它表示一个打开的文件句柄。对于a同样如此Socket
:您无法保存和恢复“打开的套接字”。
如果要序列化具有该类型字段的对象,则必须将这些字段标记为瞬态。
使用的另一个原因transient
是您的类进行某种内部缓存时。例如,如果您的类可以执行计算并且出于性能原因将其缓存每次计算的结果,则保存该缓存可能是不希望的(因为重新计算它可能比恢复它更快,或者因为不太可能使用旧的缓存值任何用途)。在这种情况下,您可以将缓存字段标记为瞬态。
问题内容: 我是Docker的新手,在OSX上使用Boot2Docker。启动后,将显示以下消息: 即使没有它,基本的Docker命令(例如)也可以正常工作。 安装说明不是非常有用: 知道它是“安全的”并没有说出它为什么有用的原因。 我不清楚的是: 泊坞窗“客户端”是什么? 泊坞窗“守护程序”是什么? 泊坞窗“主机”是什么?(Boot2Docker VM本身?) 问题答案: 好吧,我想我明白了。
问题内容: 我正在阅读 有效Java中的 序列化一章。 谁调用readObject()和writeObject()?为什么将这些方法声明为私有? 下面是书中的一段代码 是否有任何特定原因将变量声明为瞬时变量,然后在writeObject方法中将其显式写入?如果未声明为瞬态,则无论如何都应该编写它,对吗? 问题答案: (1)方法未在任何类或接口中声明。一个实现接口并需要 在序列化和反序列化过程中进行
问题内容: 为什么Java有瞬态字段? 问题答案: 在中关键字用于指示字段不应该是系列化的一部分(这意味着保存,像一个文件)的过程。 从Java语言规范,Java SE 7中版,第8.3.1.3节。transient领域: 可以标记变量transient以指示它们不是对象持久状态的一部分。 例如,你可能具有从其他字段派生的字段,并且仅应以编程方式进行操作,而不要通过序列化来保持状态。 这是一个包含
问题内容: 在什么情况下,您将使用字段变量而不是局部变量?我发现很难决定何时在类中的2个或更多方法中使用变量。我倾向于使用局部变量,并将它们传递给另一种方法。 谢谢, 莎拉 问题答案: 用面向对象的术语来说,变量作为对象的属性有意义吗?如果是这样,则应将其设为字段变量。如果没有,它可以任意选择。 记住单一责任原则-设计良好的班级应该只承担1个责任,因此只有1个改变的理由。
变量是计算机系统用于保存可变值的数据类型,我们可以直接通过变量名称来提取到对应的变量值。在 Linux 系统中,环境变量是用来定义系统运行环境的一些参数,比如每个用户不同的家目录(HOME)、邮件存放位置(MAIL)等。 值得一提的是,Linux 系统中环境变量的名称一般都是大写的,这是一种约定俗成的规范。 我们可以使用 env 命令来查看到 Linux 系统中所有的环境变量,执行命令如下: [r
问题内容: 在另一个问题中,我发布了一个人告诉我,两者之间是有区别的: 和: 在MySQL中。他还提到了MSSQL如何具有批处理范围,而MySQL如何具有会话范围。有人可以为我详细说明吗? 问题答案: 具有 用户定义变量 的概念。 它们是松散类型的变量,可以在会话的某处初始化,并保持其值直到会话结束。 它们前面带有一个标志,如下所示: 您可以使用语句或在查询内部初始化此变量: 在中开发存储过程时,