Java基础-transient关键字
2016-05-27 16:42
651 查看
使用场景:当一个类实现了Serilizable接口,那么这个类的所有属性和方法都可以被序列化。但有时,我们不希望有些属性被序列化,那么我们可以用transient关键字修饰这个属性。
注:
一个静态变量不管是否被transient修饰,均不能被序列化。
transient关键字只能修饰变量,而不能修饰方法和类。
局部变量是不能被transient关键字修饰的。
transient关键字修饰的变量如果是用户自定义类变量,则该类需要实现Serializable接口。
例外情况:
对象的序列化可以通过实现两种接口来实现:若实现的是Serializable接口,则所有的序列化将会自动进行;若实现的是Externalizable接口,则没有任何东西可以自动序列化,需要在writeExternal方法中进行手工指定所要序列化的变量,这与是否被transient修饰无关。
输出结果:
public class User implements Serializable{ private static final long serialVersionUID = 9112505189588127047L; private String username; private transient String passwd; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPasswd() { return passwd; } public void setPasswd(String passwd) { this.passwd = passwd; } }
注:
一个静态变量不管是否被transient修饰,均不能被序列化。
transient关键字只能修饰变量,而不能修饰方法和类。
局部变量是不能被transient关键字修饰的。
transient关键字修饰的变量如果是用户自定义类变量,则该类需要实现Serializable接口。
例外情况:
对象的序列化可以通过实现两种接口来实现:若实现的是Serializable接口,则所有的序列化将会自动进行;若实现的是Externalizable接口,则没有任何东西可以自动序列化,需要在writeExternal方法中进行手工指定所要序列化的变量,这与是否被transient修饰无关。
public class ExternalizableTest implements Externalizable { private transient String content = "闪光灯和规范化"; @Override public void writeExternal(ObjectOutput out) throws IOException { out.writeObject(content); } @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { content = (String) in.readObject(); } public static void main(String[] args) throws Exception { ExternalizableTest et = new ExternalizableTest(); ObjectOutput out = new ObjectOutputStream(new FileOutputStream( new File("test.txt"))); out.writeObject(et); //序列化 ObjectInput in = new ObjectInputStream(new FileInputStream(new File( "test.txt"))); et = (ExternalizableTest) in.readObject(); //反序列化 System.out.println(et.content); out.close(); in.close(); } }
输出结果:
相关文章推荐
- Java环境搭建
- java.四舍五入
- Eclipse调试Java的10个技巧
- Java获取PostgreSQL数据库中文数据乱码问题
- Meclipse快捷键
- java初始化顺序
- JNative:JAVA调用DLL
- Java基础知识:面向对象-基本概念
- java遍历map集合中的元素的方法。
- Spring.Net Ⅰ.pp---浅尝
- 如何编写一个自己的校验框架
- 桶排序与基数排序代码(JAVA)
- Java执行CMD命令并等待返回结果
- JAVA学习(10) 继承(2) 继承中的方法的覆盖和重载
- 排序算法源码(JAVA)
- Spring的ProxyFactoryBean和BeanNameAutoProxyCreator的配置
- JAVA8 十大新特性详解
- Java单例进化史
- java字段与数据库字段映射
- java反射机制详解