美文网首页
LinkedList中的成员变量为什么要用transient修饰

LinkedList中的成员变量为什么要用transient修饰

作者: 从零开始的程序猿生活 | 来源:发表于2021-03-01 14:50 被阅读0次

序列化有2种方式:
1、只是实现了Serializable接口
序列化时,调用java.io.ObjectOutputStream的defaultWriteObject方法,将对象序列化。(此时transient修饰的字段,不会被序列化)
2、实现了Serializable接口,同时提供了writeObject方法
序列化时,会调用该类的writeObject方法。而不是java.io.ObjectOutputStream的defaultWriteObject方法。(此时transient修饰的字段,是否会被序列化,取决于writeObject)

image.png

在LinkedList中 为成员变量都添加了transient修饰,但是真的就不被序列化了吗?看下图


image.png

在序列化之后,经过反序列化list中的值还是存在的。

原因:

这是因为LinkedList内部重写了writeObject()方法,所以序列化的时候走的自己的方法而不是ObjectOutputStream的writeObject()方法。

    private void writeObject(java.io.ObjectOutputStream s)
        throws java.io.IOException {
        // Write out any hidden serialization magic
        s.defaultWriteObject();

        // Write out size
        s.writeInt(size);

        // Write out all elements in the proper order.
        for (Node<E> x = first; x != null; x = x.next)
            s.writeObject(x.item);
    }

相关文章

  • LinkedList中的成员变量为什么要用transient修饰

    序列化有2种方式:1、只是实现了Serializable接口序列化时,调用java.io.ObjectOutput...

  • transient不被持久化的原因

    网上大多都是对transient使用的介绍,没有介绍为什么被transient修饰的类成员变量不被序列化,下面将通...

  • Java transient不被持久化的原因

    网上大多都是对transient使用的介绍,没有介绍为什么被transient修饰的类成员变量不被序列化,下面将通...

  • JAVA-transient 关键字

    为什么要有transient关键字 在Java中,transient修饰的变量不会被序列化,即这些变量并不是序列化...

  • Java Transient关键字

    1、transient关键字只能修饰变量,而不能修饰方法和类。2、被transient关键字修饰的变量不再能被序列...

  • AbstractQueuedSynchronizer(AQS)整

    成员变量 private transient volatile Nodehead transient vola...

  • Java基础题

    transient和volatile是java关键字吗? transient是变量修饰符。标记为transient...

  • java的关键字transient

    Java中transient关键字的作用,简单地说,就是让某些被修饰的成员属性变量不被序列化,这一看好像很好理解,...

  • Java中static的用法

    在Java中,static可以修饰成员变量、成员方法、代码块和内部类。 1. static修饰成员变量 stati...

  • 不想进行序列化

    对于不想进行序列化的变量,使用transient关键字修饰。 transient关键字的作用是:阻止实例中那些用此...

网友评论

      本文标题:LinkedList中的成员变量为什么要用transient修饰

      本文链接:https://www.haomeiwen.com/subject/qwrafltx.html