static和transient的序列化

本文探讨了Java中序列化的基本概念,以及如何使用transient关键字来排除对象中不应被序列化的部分,如敏感信息。同时,解释了静态成员与序列化的关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

@[TOC]static和transient的序列化
序列化的目的就是讲对象按照流的方式写入到硬盘,是对象!对象!对象!静态成员严格意义上来说是属于类的,不属于对象。
对于实现序列化接口的类,可能有写信息不希望被序列化到硬盘,所以就出现了transient关键字,被transient修饰的属性,仅仅存在于当前程序的内存中,程序关闭就消失。
satic不能序列化,
transient修饰的属性不能被序列化,一些敏感信息例如银行卡密码等
反序列化:
当ObjectInputStream读取文件时候,会先读取序列化对象的class文件,如果发现文件序列化id和class序列化id不一致,InvalidClassException未知类异常,可以将序列号设置成final
jdkj:ava version "1.8.0_131
代码----
package cn.jpa;

import java.io.*;

class Person implements Serializable {
public static void main(String[] args) throws Exception {
Person xm = new Person(“xm”, 99);
xm.staticInt = 2;
xm.staticStr = “staticStr”;
xm.trans=1000;
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(“d:\p.txt”));
oos.writeObject(xm);
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(“d:\p.txt”));
Object o = ois.readObject();
System.out.println(o);
}

private static final long serialVersionUID = 1L;
private String name;
//private static int age;
public transient int trans;
public int age;
public static String staticStr1 = "staticStr1";
public static String staticStr;
public static int staticInt1 = 1;
public static int staticInt;

public Person() {
}

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

@Override
public String toString() {
    return "Person{" +
            "name='" + name + '\'' +
            ", staticInt1=" + staticInt1 +
            ", staticInt=" + staticInt+
            ", staticStr1=" + staticStr1 +
            ", staticStr=" + staticStr +
            ", trans=" + trans +
            ", 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;
}

}


结果

如果发现输出的原因是因为同一个jvm在jvm的内存里面有,如果关闭重新运行就没了!在这里插入图片描述在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值