建网站用的域名多少钱,国外大气的网站,龙岩 网站建设,域名是com好还是cn好我们都知道一个对象只要实现了Serilizable接口#xff0c;这个对象就可以被序列化#xff0c;Java的这种序列化模式为开发者提供了很多便利#xff0c;我们可以不必关系具体序列化的过程#xff0c;只要这个类实现了Serilizable接口#xff0c;这个的所有属性和方法都会自…我们都知道一个对象只要实现了Serilizable接口这个对象就可以被序列化Java的这种序列化模式为开发者提供了很多便利我们可以不必关系具体序列化的过程只要这个类实现了Serilizable接口这个的所有属性和方法都会自动序列化。 然而在实际开发过程中我们常常会遇到这样的问题这个类的有些属性需要序列化而其他属性不需要被序列化诚然你可以让这个类来实现Externalizable接口这个接口是Serilizable的子接口但是你必须实现readExternal和writeExternal方法你可以在这两个方法中实现具体属性的反序列化和序列化操作。然而这就意味着你必须在这两个方法中手工编写额外的代码来进行具体属性的序列化。java的transient关键字为我们提供了便利你只需要实现Serilizable接口将不需要序列化的属性前添加关键字transient序列化对象的时候这个属性就不会序列化到指定的目的地中。 package com.zslin.list.demo; import java.io.Serializable;/** * * author WQbr * version 创建时间2017年6月18日 上午10:33:15br */
public class A implements Serializable{int a;transient String b;public A(int a,String b){this.a a;this.b b;}public String toString(){return a a,b b;}
} package com.zslin.list.demo;import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;/*** * author WQbr* version 创建时间2017年6月18日 上午10:34:09br*/
public class TestTransient {public static void main(String[] args) throws IOException,ClassNotFoundException {A a new A(25, 张三);System.out.println(a);ObjectOutputStream oos new ObjectOutputStream(new FileOutputStream(D://mm.txt));oos.writeObject(a);oos.close();ObjectInputStream ois new ObjectInputStream(new FileInputStream(D://mm.txt));a (A) ois.readObject();System.out.println(a);}
} 运行结果 在上面的例子中我将属性b前添加关键字transient我们看到虽然我们序列化的对象a的属性值为“张三”但是当我们反序列化之后发现这个属性为空说明这个属性没有进行序列化。 transient使用小结 1一旦变量被transient修饰变量将不再是对象持久化的一部分该变量内容在序列化后无法获得访问。 2transient关键字只能修饰变量而不能修饰方法和类。注意本地变量是不能被transient关键字修饰的。变量如果是用户自定义类变量则该类需要实现Serializable接口。 3被transient关键字修饰的变量不再能被序列化一个静态变量不管是否被transient修饰均不能被序列化。 我们也可以通过ArrayList 源码中的 elementData 属性进一步学习transient这一属性。 具体可以参照我的上一篇博客。 以上。 转载于:https://www.cnblogs.com/mr-wuxiansheng/p/7043751.html