`
suky
  • 浏览: 146966 次
  • 性别: Icon_minigender_2
  • 来自: 厦门
社区版块
存档分类
最新评论

transient关键字

    博客分类:
  • J2ME
阅读更多

      最近在维护系统代码时,发现了变量修饰符transient,这在我以前的项目开发中没有用过。在提及仅仅包含数据的java对象时,最先想到的是PO,VO等。

      PO(persistant object) 持久化对象,一般和数据库中的表映射的java对象,在使用Hibernate框架时,常常会直接利用编译器生成PO。而VO(value object) 值对象,通常用在业务逻辑层,对应业务对象。

      PO和VO的使用目的是为了降低各层之间的耦合,但是每次都进行二者之间的转换,也是比较麻烦的。考虑到这些,transient似乎起到了微妙的作用,修饰某业务变量时,进行序列化时不必传送此变量。出于安全等考虑角度,在实际项目经验中,对象需要序列化到数据库、JDNI或通过Object流传递给其他对象的话,对象中的非持久性字段也应该考虑加transient关键字。

transient的测试例子:

 

import java.io.*;

public class TransientTest {

	public static void main(String[] args) {
		User user = new User("Suky","qwe123");
		System.out.println("name:"+user.getName());//name:Suky
		System.out.println("pwd:"+user.getPassword());//pwd:qwe123
		
		try {
			ObjectOutputStream obj = new ObjectOutputStream(new FileOutputStream("transientOUT.text"));
			obj.writeObject(user);
			obj.close();
			
			ObjectInputStream in = new ObjectInputStream(new FileInputStream("transientOUT.text"));
			User user2 = (User)in.readObject();
			in.close();
			System.out.println("name2:"+user2.getName());//name2:Suky
			System.out.println("pwd2:"+user2.getPassword());//pwd2:null
			
			//测试读出实例,不会执行构造函数
			ObjectOutputStream output = new ObjectOutputStream(new FileOutputStream("transientOUT.text"));
			output.writeObject(new User());
			output.close();
			
			ObjectInputStream input = new ObjectInputStream(new FileInputStream("transientOUT.text"));
			User user3 = (User)input.readObject();
			input.close();
			System.out.println("name3:"+user3.getName());//name3:Test
			System.out.println("pwd3:"+user3.getPassword());//pwd3:null
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

class User implements java.io.Serializable{

	private static final long serialVersionUID = 1L;
	private String name;
	private  String password;//transient
	
	User(){
		this.name = "Test";
		this.password = "123456";
	}
	User(String name,String password){
		this.name = name;
		this.password = password;
	}
	
	public String getName() {return name;}
	public void setName(String name) {this.name = name;}
	public String getPassword() {return password;}
	public void setPassword(String password) {this.password = password;}
	
}
 
分享到:
评论

相关推荐

    Java_transient关键字

    ### Java中的transient关键字详解 在Java编程语言中,`transient`关键字是一个非常重要的概念,主要用于对象序列化过程中对特定变量的控制。当一个类实现了`Serializable`接口时,其对象可以被序列化为一个持久化的...

    Java中的transient关键字.doc

    Java 中的 transient 关键字 在 Java 编程中,transient 关键字是一个非常重要的概念,它用来说明一个属性是临时的,不会被序列化。在 Java 中,序列化是指将对象的状态信息转换为字节流的过程,以便于对象在网络上...

    Java之transient关键字.Java

    在给定的文件列表中,除了与`transient`关键字相关的`Java之transient关键字.md`文件,其他如`javaweb\Tomcat.md`、`javaweb\Cookie、Session、localStorage、sessionStorage区别和用法.md`等文件可能涉及Web开发中...

    深入理解Java虚拟机-Java内存区域透彻分析(序列化、反序列化概念及其使用场景+实现序列化的方式+transient关键字)

    深入理解Java虚拟机-Java内存区域透彻分析(序列化、反序列化概念及其使用场景+实现序列化的方式+transient关键字) Java序列化和反序列化是Java虚拟机中的一种重要机制,它们可以将Java对象转换为二进制数据,然后...

    Java transient关键字原理解析

    Java transient关键字原理解析 Java 中的 transient 关键字是一个重要的概念,它被用来表示变量将不被序列化处理。那么在理解 transient 关键字之前,我们先了解下什么是序列化。 序列化是对象进行持久化处理,也...

    Java transient关键字使用小记

    在Java编程语言中,`transient`关键字是一个非常重要的概念,它与对象的序列化过程紧密相关。序列化是将一个对象的状态转换为字节流,以便存储或在网络中传输。当一个类实现了`Serializable`接口,该类的对象就可以...

    Java transient关键字与序列化操作实例详解

    Java transient关键字与序列化操作实例详解 Java语言中的transient关键字是用来修饰变量的,表明该变量不会被Java虚拟机(JVM)序列化,即不会被写入到二进制流中。序列化是Java语言中的一种机制,用于将对象转换为...

    java中transient关键字用法分析

    主要介绍了java中transient关键字用法,以实例形式分析了java中transient关键字的功能及使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下

    Java transient 关键字详解及实例代码

    Java中的`transient`关键字是用于标记类的成员变量,表明该变量不应该参与序列化过程。当一个类实现了`Serializable`接口,其对象可以被序列化,即将对象的状态转换为字节流,以便存储或在网络中传输。序列化是Java...

    Java中的transient关键字介绍

    在Java编程语言中,`transient`关键字是一个非常重要的概念,它与对象的序列化密切相关。序列化是指将对象的状态转换为字节流,以便存储或在网络上传输。当一个类实现了`Serializable`接口,它的实例就可以被序列化...

    java关键字transient

    **transient关键字的作用** `transient`关键字用于标记一个实例变量,表示这个变量不应该作为对象状态的一部分进行序列化。当一个对象被序列化时,`transient`修饰的变量会被忽略,它们的值不会包含在序列化的表示中...

    Java关键字Transient与串行化

    #### Transient关键字解析 在Java编程语言中,`transient`是一个非常重要的关键字,主要用于对象的串行化过程中。它用于标记对象中的某些字段,使得这些字段不会被串行化到持久存储介质中。这对于保护敏感数据或...

    Java关键字—-transient

    本篇文章序列化、反序列化用的类是同一个类,可以通过注释main中1然后修改Stu类实现有无transient关键字修饰、serialVersionUID是否不同,得到以下结果: 1、serialVersionUID的数值大小不会影响序列化后的字节数...

    javafaq javafaq javafaq

    【Java编程:transient关键字详解】 在Java编程中,`transient`关键字有着特殊的作用,它主要用于处理对象的序列化过程。序列化是Java提供的一种将对象的状态转换为字节流,以便存储到磁盘或者在网络中传输的技术。...

    深入探索Java对象的序列化

    深入探索Java对象的序列化 对象序列化就是把对象写入到输出流中,用来存储或者传输。...实现了序列化接口的类,如果其成员不需要序列化进去,则使用transient关键字进行修饰。 下面给出个例子:

    java 中序列化NotSerializableException问题解决办法

    Java 中序列化 NotSerializableException 问题解决办法 Java 中序列化 NotSerializableException 问题是 ...我们还讨论了什么时候需要标记 transient,以及如何正确地使用 transient 关键字。希望本文能够帮助到大家。

Global site tag (gtag.js) - Google Analytics