• Java中的关键字 transient


    定义

    java语言的关键字,变量修饰符,如果用transient声明一个实例变量,当对象存储时,它的值不需要维持。换句话来说就是,用transient关键字标记的成员变量不参与序列化过程。

    作用

            Java的serialization提供了一种持久化对象实例的机制。当持久化对象时,可能有一个特殊的对象数据成员,我们不想用serialization机制来保存它。为了在一个特定对象的一个域上关闭serialization,可以在这个域前加上关键字transient。当一个对象被序列化的时候,transient型变量的值不包括在序列化的表示中,然而非transient型的变量是被包括进去的。

    例子

    新建一个User类,实现序列化接口

     1 import java.io.Serializable;
     2 
     3 public class User implements Serializable {
     4     private static final long serialVersionUID = -1897102804742639482L;
     5 
     6     private String userName;
     7     private transient String password;
     8 
     9     public User() {
    10     }
    11 
    12     public User(String userName, String password) {
    13         this.userName = userName;
    14         this.password = password;
    15     }
    16 
    17     public String getUserName() {
    18         return userName;
    19     }
    20 
    21     public void setUserName(String userName) {
    22         this.userName = userName;
    23     }
    24 
    25     public String getPassword() {
    26         return password;
    27     }
    28 
    29     public void setPassword(String password) {
    30         this.password = password;
    31     }
    32 
    33     @Override
    34     public String toString() {
    35         return "User [userName=" + userName + ", password=" + password + "]";
    36     }
    37 
    38     @Override
    39     public int hashCode() {
    40         final int prime = 31;
    41         int result = 1;
    42         result = prime * result + ((userName == null) ? 0 : userName.hashCode());
    43         return result;
    44     }
    45 
    46     @Override
    47     public boolean equals(Object obj) {
    48         if (this == obj)
    49             return true;
    50         if (obj == null)
    51             return false;
    52         if (getClass() != obj.getClass())
    53             return false;
    54         User other = (User) obj;
    55         if (userName == null) {
    56             if (other.userName != null)
    57                 return false;
    58         } else if (!userName.equals(other.userName))
    59             return false;
    60         return true;
    61     }
    62 
    63 }

    测试类

     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 TestTransient {
     8 
     9     public static void main(String[] args) {
    10         User user = new User();
    11         
    12         user.setUserName("zhangsan");
    13         user.setPassword("123");
    14 
    15         String fileName = "user.out";
    16         ObjectOutputStream oos = null;
    17         try {
    18             oos = new ObjectOutputStream(new FileOutputStream(fileName));
    19             oos.writeObject(user);
    20             oos.flush();
    21         } catch (IOException e) {
    22             e.printStackTrace();
    23         } finally {
    24             try {
    25                 oos.close();
    26             } catch (IOException e) {
    27                 e.printStackTrace();
    28             }
    29         }
    30         
    31         
    32         User newUser = null;
    33         ObjectInputStream ois = null;
    34         try {
    35             ois = new ObjectInputStream(new FileInputStream(fileName));
    36             newUser = (User) ois.readObject();
    37             
    38             System.out.println(newUser.toString());
    39         } catch (IOException e) {
    40             e.printStackTrace();
    41         } catch (ClassNotFoundException e) {
    42             e.printStackTrace();
    43         } finally {
    44             try {
    45                 ois.close();
    46             } catch (IOException e) {
    47                 e.printStackTrace();
    48             }
    49         }
    50     }
    51 
    52 }

    控制台打印:

    User [userName=zhangsan, password=null]

    注意:passsword为null

  • 相关阅读:
    selenium python 中浏览器操作
    wireshark基础学习—第三部分wireshark的过滤器语法
    wireshark基础学习—第二部分wireshark的基础操作
    wireshark基础学习—第一部分wireshark的基础知识
    Python 之 tuple
    Python 之 list
    python socketpool:通用连接池
    APScheduler 3.0.1浅析
    检查SDE版本健康情况的常用SQL语句
    免重启下刷新新添加的磁盘信息
  • 原文地址:https://www.cnblogs.com/zhuitian/p/11461996.html
Copyright © 2020-2023  润新知