zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Spring有用功能--Profile、WebService、缓存、消息、ORM
    opencv标定程序(改动)
    Install Docker Mac OS X
    Android eclipse 提示java代码 快捷键
    Mac使用Docker-machine訪问docker publish port
    决策树之C4.5算法学习
    为ImageView设置背景图片(代码中)
    BZOJ 3675 APIO2014 序列切割 斜率优化DP
    思科模拟器之路由器-RIP-DNS解析server
    POJ 3177 Redundant Paths
  • 原文地址:https://www.cnblogs.com/zhuitian/p/11461996.html
Copyright © 2011-2022 走看看