• 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

  • 相关阅读:
    Mayan游戏 (codevs 1136)题解
    虫食算 (codevs 1064)题解
    靶形数独 (codevs 1174)题解
    黑白棋游戏 (codevs 2743)题解
    神经网络 (codevs 1088) 题解
    The Rotation Game (POJ 2286) 题解
    倒水问题 (codevs 1226) 题解
    银河英雄传说 (codevs 1540) 题解
    生日蛋糕 (codevs 1710) 题解
    第一章 1.11 高阶函数
  • 原文地址:https://www.cnblogs.com/zhuitian/p/11461996.html
Copyright © 2020-2023  润新知