序列化04_transient關鍵字_瞬態關鍵字,InvalidClassException異常_原理

package com.itheima.demo04.ObjectStream;java

import java.io.Serializable;ide

/*this

序列化和反序列化的時候,會拋出NotSerializableException沒有序列化異常
類經過實現 java.io.Serializable 接口以啓用其序列化功能。未實現此接口的類將沒法使其任何狀態序列化或反序列化。
Serializable接口也叫標記型接口
    要進行序列化和反序列化的類必須實現Serializable接口,就會給類添加一個標記
    當咱們進行序列化和反序列化的時候,就會檢測類上是否有這個標記
        有:就能夠序列化和反序列化
        沒有:就會拋出 NotSerializableException異常
去市場買肉-->肉上有一個藍色章(檢測合格)-->放心購買-->買回來怎麼吃隨意


static關鍵字:靜態關鍵字
    靜態優先於非靜態加載到內存中(靜態優先於對象進入到內存中)
    被static修飾的成員變量不能被序列化的,序列化的都是對象
    private static int age;
    oos.writeObject(new Person("小美女",18));
    Object o = ois.readObject();
    Person{name='小美女', age=0}

transient關鍵字:瞬態關鍵字
    被transient修飾成員變量,不能被序列化
    private transient int age;
    oos.writeObject(new Person("小美女",18));
    Object o = ois.readObject();
    Person{name='小美女', age=0}

*/
public class Person implements Serializable{spa

private static final long serialVersionUID = 1L;
private String name;
//private static int age;
//private transient int age;
public int age;

public Person() {
}

public Person(String name, int age) {
    this.name = name;
    this.age = age;
}

@Override
public String toString() {
    return "Person{" +
            "name='" + name + '\'' +
            ", age=" + age +
            '}';
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public int getAge() {
    return age;
}

public void setAge(int age) {
    this.age = age;
}

}
序列號衝突的異常code

clipboard.png

相關文章
相關標籤/搜索