129-transient关键字 瞬态关键字

static静态关键字:静态关键字优先于非静态加载到内存中(静态优先于对象进入到内存中)
被static修饰的成员变量不能被序列化因为序列化的都是对象
  private  static int age;
    oos.writeObject(new Person("TT",18));
    System.out.println(o); //Person{name='null', age=0}为什么输出0 静态的是不能被序列化的

transient关键字:瞬态关键字
  被transient修饰的成员变量不能被序列化(不能以对象流被ObjectInputStream和ObjectInputStream的形式读取和写入) 跟上面static作用是一样的

Person类

public class Person implements Serializable {  //序列化和反序列化的类要实现标记型接口
    private  static String name;  注意这里加了静态关键字static
    private  transient int age;  注意这里加了瞬态关键字transient

先序列化:写入对象 output

public class Demo01ObjectOutputStream {

    public static void main(String[] args) throws IOException {
        // 1、创建ObjectOutputStream对象,构造方法中传递字节输出流
       ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("D:\\百度网盘下载\\a.txt"));
        // 2、使用ObjectOutputStream对象中的方法writeObject,把对象写入到文件中
         oos.writeObject(new Person("TT",18)); //二进制存储无法直接看
        //  3、释放资源
        oos.close();
    }
}

反序列化 读取对象 input

public class Demo02ObjectInputStream {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        //1、创建ObjectInputStream对象,构造方法中传递字节输入流
        ObjectInputStream ois= new ObjectInputStream(new FileInputStream("D:\\百度网盘下载\\a.txt"));
        //2、使用ObjectInputStream对象中的方法readObject读取保存对象的文件
        Object o = ois.readObject();
        //  3、释放资源
        ois.close();
        // 4、使用读取出来的对象(打印)
        System.out.println(o);//Person{name='TT', age=18}
        Person p = (Person)o;  //强制转换为Person类
        System.out.println(p.getName()+p.getAge());//TT18
    }
}

输出:

Person{name='null', age=0}
null0
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值