transient关键字,我们在使用Hibernate中,可以用@Transient注解某个字段不需要持久化,那么java中这个关键字是怎么样呢?

总结:当一个对象实现了Serilizable接口,那么大家都知道,这个对象可以被序列化,但是当你存在某些需求,比如你需要这个对象的某一个或者某几个属性不想被序列化的时候,可以对属性进行transient关键字声明

代码部分:

package org.test;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

/**
* @version 1.0
* @author NICK
*/

public class TransientTest {

public static void main(String[] args) throws Exception {
People people = new People();
people.setUserName("Nickwu");
people.setPassword("password");

System.out.println("people --> username: " + people.getUserName());
System.out.println("people --> password: " + people.getPassword());

ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("people.txt"));
oos.writeObject(people);
oos.flush();
oos.close();

ObjectInputStream ois = new ObjectInputStream(new FileInputStream("people.txt"));
People p = (People) ois.readObject();
ois.close();

System.out.println("p-->username: " + p.getUserName());
System.out.println("p-->password: " + p.getPassword());
}

}

class People implements Serializable {


/**
*
*/

private static final long serialVersionUID = 1L;

private String userName;

private transient String password;

public String getUserName() {
return userName;
}

public void setUserName(String userName) {
this.userName = userName;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

}

使用场景:
如果一个用户有一些敏感信息(如密码,银行卡号等),为了安全起见,不希望在网络操作(主要涉及到序列化操作,本地序列化缓存也适用)中被传输,这些信息对应的变量就可以加上transient关键字。换句话说,这个字段的生命周期仅存于调用者的内存中而不会写到磁盘里持久化。

使用总结:
1)一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。

2)transient关键字只能修饰变量,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的。变量如果是用户自定义类变量,则该类需要实现Serializable接口。

3)被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化。

4)只有当实现了Serilizable接口的时候,transient才能生效,java中实现了Externalizable也可以序列化,但是实现了Externalizable接口,需要writeExternal才能写入序列化,这个时候即使声明了transient,只要调用了writeExternal也可以被序列化

更多相关文章

  1. Eclipse Java:根据构建配置定义最终变量
  2. 在string.xml中调用变量[重复]
  3. 增强的for循环中局部变量的范围
  4. java中final关键字详解
  5. java关键字个人理解
  6. 牛客网Java刷题知识点之同步方法和同步代码块的区别(用synchroniz
  7. JAVA-全局变量与局部变量-继承-封装-(是三节哦!今天的有点多)
  8. 小聊天程序,访问文件之间的变量
  9. 环境变量在cron中看不到

随机推荐

  1. 仿微信备注 editext下划线
  2. [Android遊戲] 森林跑跑熊:iOS移植的殺時
  3. Android应用程序目录结构分析
  4. android中使用线程(比如修改textview的tex
  5. Go support for Android
  6. Android,GridLayout布局(简易计算器)
  7. Android 线程池来管理线程
  8. Android 组件属性
  9. Android 基本的UI布局
  10. android-R.string