1.Java中transient关键字了解

在看linkedlist的源码时发现许多关键的变量都使用了transient关键字,
如下:

transient int size = 0;
transient Node<E> first;
transient Node<E> last;

如此便引发了思考:为什么要用这个关键字呢?

transient是短暂的意思,用于修饰成员变量,被transient修饰过的成员变量会在序列化时被忽略。
关于序列化的了解通过搜索是这样解释的

序列化
Java中对象的序列化指的是将对象转换成以字节序列的形式来表示,这些字节序列包含了对象的数据和信息,一个序列化后的对象可以被写到数据库或文件中,也可用于网络传输。一般地,当我们使用缓存cache(内存空间不够有可能会本地存储到硬盘)或远程调用rpc(网络传输)的时候,经常需要让实体类实现Serializable接口,目的就是为了让其可序列化。当然,序列化后的最终目的是为了反序列化,恢复成原先的Java对象实例。所以序列化后的字节序列都是可以恢复成Java对象的,这个过程就是反序列化

为什么要用transient呢?

对于一些特殊的数据成员,我们不想用序列化机制来保存它。为了在一个特定对象的一个成员变量上关闭序列化,可以在这个成员变量前加上关键字transient。
注意:static修饰的静态变量天然就是不可序列化的。

2.内部类了解

在写 MyLinkedList过程中,观看Java LinkedList源码用于实例化链表的单元便是Node。如下:

public class Node {//用于实例化链表
        Object item;//存储的元素
        Node up;//上一个节点
        Node next;//下一个节点
            public Node(String item, Node up, Node next) {//元素给节点赋值
            this.item = item;
            this.up = up;
            this.next = next;
        }
    }

其中Node便是一个内部类,内部类的对象依附于外部类对象而存在,可以看做一个变量。

访问方式
方式一:在外部类提供一个方法创建内部类的对象进行访问。
方式二:在其他类直接创建内部类的对象。(直接new出来)

大概使用:

//外部类
class Out{
    //内部类
    static class Inner{
        public void print() {
            System.out.println("这个内部类的print方法!");
        }
    }
    //在外部的方法中创建了内部类的对象,然后调用内部 方法。
    static public void outin() {
        Inner in = new Inner();
        in.print();
    }
}
    //其他类
    class Test {
        public static void main(String[] args) {
            Out.Inner in = new Out.Inner();
            in.print();
            Out.outin();
        }
    }

结果:

java字段指定序列化的key lombok java序列化关键字_序列化