Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 94fcbf2

Browse files
committed
transient 关键字的作用
1 parent e29dba3 commit 94fcbf2

File tree

1 file changed

+55
-0
lines changed

1 file changed

+55
-0
lines changed
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
# transient 关键字的作用?
2+
3+
[Java 语言规范](http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.3.1.3)中提到,transient 关键字用来说明指定属性不进行序列化.
4+
5+
若要理解 transient 关键字的作用,自然需要对序列化有一定的认识.
6+
7+
** 序列化 **
8+
9+
序列化是用来持久化对象的状态 -- 将对象转化为字节码保存到指定的文件中.类似地,可以通过反序列化,将字节码还原为对象原有的状态.序列化是 Java 中一个比较重要的概念,因为在网络编程中会经常用到序列化与反序列化机制.一个相对若想在网络中传输,就必须转化为字节的形式.而 Serializable 接口就是用来标识某个类或接口可以转化为字节码,Serializable 可以认为是一个标识符,因为它没有任何的方法.
10+
11+
Serializable 允许我们将一个类转化为字节码,进而在网络传输.可是,一个类中可能存在某些敏感的信息,我们是不想起网络中传输的,这时候我们就需要借助 transient 关键字了.被 transient 关键字标识的 field,不会进行序列化.
12+
13+
下面通过一个例子说明 transient 关键字的作用.现假设我们需要在网络中传输 Person 类:
14+
```
15+
public class Person implements Serializable{
16+
17+
private static final long serialVersionUID = 1L;
18+
19+
private String name;
20+
private String certNo; // 身份证号码
21+
private int age;
22+
23+
public Person(String name, String certNo, int age) {
24+
this.name = name;
25+
this.certNo = certNo;
26+
this.age = age;
27+
}
28+
29+
@Override
30+
public String toString() {
31+
return "Person{" +
32+
"name='" + name + '\'' +
33+
", certNo='" + certNo + '\'' +
34+
", age=" + age +
35+
'}';
36+
}
37+
}
38+
```
39+
40+
若不使用 transient 关键字,反序列化时输出的信息是 :
41+
```
42+
Person{name='tianya', certNo='12314', age=23}
43+
```
44+
45+
我们知道,身份证号码属于敏感信息,并不想在网络中传输,这时我们就可以借助 transient 关键字,如下:
46+
```
47+
private transient String certNo;
48+
```
49+
50+
这个时候,通过反序列化获取的 Person 信息如下 :
51+
```
52+
Person{name='tianya', certNo='null', age=23}
53+
```
54+
55+
stackoverflow原址:http://stackoverflow.com/questions/910374/why-does-java-have-transient-variables

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /