Java -----transient 和static

越来越喜欢深究java基础了,讲讲 transient  和static 对序列化的影响。废话少说,直接上代码就可以了

 1 package serializable;
 2 
 3 import java.io.Serializable;
 4 
 5 public class User implements Serializable {
 6     private String name;
 7     private transient String password; // 被transient修饰的变量
 8     private static String age;
 9 
10     
11     public User() {
12         super();
13     }
14 
15     public String getName() {
16         return name;
17     }
18 
19     public void setName(String name) {
20         this.name = name;
21     }
22 
23     public String getPassword() {
24         return password;
25     }
26 
27     public void setPassword(String password) {
28         this.password = password;
29     }
30 
31     public static String getAge() {
32         return age;
33     }
34 
35     public static void setAge(String age) {
36         User.age = age;
37     }
38 
39 }
 1 import java.io.FileInputStream;
 2 import java.io.FileOutputStream;
 3 import java.io.IOException;
 4 import java.io.ObjectInputStream;
 5 import java.io.ObjectOutputStream;
 6 
 7 public class Test {
 8     public static void main(String[] args) throws Exception {
 9         // User user = new User();
10         // user.setAge("22");
11         // user.setName("小明");
12         // user.setPassword("admin");
13         // System.out.println(user.getAge()+"	"+user.getName()+"	"+user.getPassword());
14         // ObjectOutputStream oos = new ObjectOutputStream(new
15         // FileOutputStream("e:/user.txt"));
16         // oos.writeObject(user);
17         // oos.flush();
18         // oos.close();
19         //
20         // ObjectInputStream ois = new ObjectInputStream(new
21         // FileInputStream("e:/user.txt"));
22         // User users = (User) ois.readObject();
23         //
24         // System.out.println(users.getAge()+"	"+users.getName()+"	"+users.getPassword());
25         // User user = new User();
26         // user.setAge("22");
27         // user.setName("小明");
28         // user.setPassword("admin");
29         // System.out.println(user.getAge()+"	"+user.getName()+"	"+user.getPassword());
30         // ObjectOutputStream oos = new ObjectOutputStream(new
31         // FileOutputStream("e:/user.txt"));
32         //
33         // oos.writeObject(user);
34         // oos.flush();
35         // oos.close();
36     
37         ObjectInputStream ois = new ObjectInputStream(new FileInputStream("e:/user.txt"));
38         User users = (User) ois.readObject();
39 
40         System.out.println(users.getAge() + "	" + users.getName() + "	" + users.getPassword());
41 
42     }
43 }

运行截图贴上

第二次的代码运行截图,一目了然,

从运行结果可以看出用  transient 修饰的变量在反序列化后值为 null

 被static修饰的变量应该也是不会被序列化的,因为只有堆内存会被序列化.所以静态变量会天生不会被序列化。也是null.

原文地址:https://www.cnblogs.com/anyehome/p/8478753.html