这篇文章主要介绍了java transient关键字原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
java 中的 transient 关键字被用来表示变量将不被序列化处理。那么在理解 transient 关键字之前,我们先了解下什么是序列化。
什么是序列化
序列化是对象进行持久化处理,也就是说,将对象转化成一个字节流进行存储(比如存储为一个字节文件)或传输(通过网络传输字节)。同时,我们也可以从字节中反序列化一个对象出来。这是java程序中一个重要的概念,因为网络应用中通常需要将对象序列化成字节传输。每一个需要序列化的对象,都要实现 serializable 接口。
transient关键字
默认情况下,对象所有的变量都会转变成持久状态。但是有时候,一些变量可能不需要序列化,因为没必要对这些变量进行序列化。这时,你就可以将这些变量申明为 transient。如果一个变量被申明为 transient,那么这个变量就不会被序列化。
通过下面这个例子应该能够解释 transient 关键字的作用:
public class namestore implements serializable { private string firstname; private transient string middlename; private string lastname; public namestore (string fname, string mname, string lname){ this.firstname = fname; this.middlename = mname; this.lastname = lname; } @override public string tostring() { return "namestore{" + "firstname='" + firstname + '\'' + ", middlename='" + middlename + '\'' + ", lastname='" + lastname + '\'' + '}'; } } public class transientexample { public static void main(string[] args) throws exception { namestore namestore = new namestore("steve", "middle","jobs"); objectoutputstream o = new objectoutputstream(new fileoutputstream("namestore")); // writing to object o.writeobject(namestore); o.close(); // reading from object objectinputstream in = new objectinputstream(new fileinputstream("namestore")); namestore namestore1 = (namestore)in.readobject(); system.out.println(namestore1); } }
上面例子的输出:
namestore{firstname='steve', middlename='null', lastname='jobs'}
middlename 变量被申明为 transient,因此没有被序列化.
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。
如对本文有疑问, 点击进行留言回复!!
NullPointerException: Attempt to invoke virtual method ‘android.content.res.XmlResourceParser androi
关于启动appium-desktop,报错:Cannot extract apk info using apkanalyzer. Falling back to aapt. Original ....
Gradle 发布共享库——如何通过Gradle发布Android依赖库(aar)到 jitpack 公共仓库
Gradle 发布共享库——如何通过Gradle发布java依赖库(jar)到 jitpack 公共仓库(—)
网友评论