transient的理解

简介: 用法解释 1)一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。 2)transient关键字只能修饰变量,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的。

用法解释

1)一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。

2)transient关键字只能修饰变量,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的。变量如果是用户自定义类变量,则该类需要实现Serializable接口。

3)被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化。

细节和例外

对象的序列化可以通过实现两种接口来实现:

若实现的是Serializable接口,则所有的序列化将会自动进行,符合上面的规律。

若实现的是Externalizable接口,则没有任何东西可以自动序列化,需要在writeExternal方法中进行手工指定所要序列化的变量,这与是否被transient修饰无关。

public class ExternalizableTest implements Externalizable {

    private transient String content = "是的,我将会被序列化,不管我是否被transient关键字修饰";

    @Override
    public void writeExternal(ObjectOutput out) throws IOException {
        out.writeObject(content);
    }

    @Override
    public void readExternal(ObjectInput in) throws IOException,
            ClassNotFoundException {
        content = (String) in.readObject();
    }

    public static void main(String[] args) throws Exception {
        
        ExternalizableTest et = new ExternalizableTest();
        ObjectOutput out = new ObjectOutputStream(new FileOutputStream(
                new File("test")));
        out.writeObject(et);

        ObjectInput in = new ObjectInputStream(new FileInputStream(new File(
                "test")));
        et = (ExternalizableTest) in.readObject();
        System.out.println(et.content);

        out.close();
        in.close();
    }
}

//content变量会被序列化吗?是的,运行结果就是:
//是的,我将会被序列化,不管我是否被transient关键字修饰

 

目录
相关文章
|
8月前
来及C++primer中的mutable
来及C++primer中的mutable
32 0
|
8月前
mutable的使用
mutable的使用
ActiveSupport::CurrentAttributes provides a thread-isolated attributes singleton
ActiveSupport::CurrentAttributes provides a thread-isolated attributes singleton
|
存储 Java 数据安全/隐私保护
被遗忘的Java关键字:transient!
在 Java 中,transient 是一个关键字,用于指定一个类的字段在序列化时应该被忽略。transient 关键字只是暂时地在序列化过程中忽略了该字段,而不是永久性地从对象中删除该字段。
|
Java 安全 缓存
final和volatile在thread-safe中的作用
final和volatile都在多线程中有着自己的适用范围,我的简单的理解是:final可以用于常量(初始化之后,引用不被修改),volatile可以用于多个线程的并发读写。
2003 0
|
存储 Java 数据安全/隐私保护
java关键字之transient
这个关键字的作用其实我在写java的序列化机制中曾经写过,不过那时候只是简单地认识,只要其简单的用法,没有深入的去分析。这篇文章就是去深入分析一下transient关键字。 先给出这篇文章的大致脉络 首先,介绍了transient的基本概念和基本用法 然后,介绍深入分析一下transient关键字,并介绍几个需要掌握的问题 最后,来个总结
166 0
java关键字之transient
|
SQL 缓存 Java
【SSH快速进阶】——探索Hibernate对象的三种状态:Transient、Persistent、Detached
 学习过操作系统的朋友,脑子里肯定都会有这张进程的状态转换图:
【SSH快速进阶】——探索Hibernate对象的三种状态:Transient、Persistent、Detached
|
Java 开发者
Transient 关键字|学习笔记
快速学习 Transient 关键字
107 0
Transient 关键字|学习笔记
|
iOS开发
KVC change all Private
KVC change all Private
132 0
|
Java 编译器
Java关键字之final
Java final 关键字
188 0

热门文章

最新文章