美文网首页
Java基础之transient关键字

Java基础之transient关键字

作者: 一生鎻愛 | 来源:发表于2018-09-20 09:19 被阅读0次

    在开发过程中经常会用到序列化,此时就需要实现Serializable接口

    @Data
    public class User implements Serializable{
    
        private static final long serialVersionUID = -4827686424318178402L;
        
        private int userId;
        private String userName;
        
    }
    

    @Data是lombok注解,作用是自动生成getset方法

    当前的需求是不想将userName字段序列化,该怎么办呢?

    @Data
    public class User implements Serializable{
    
        private static final long serialVersionUID = -4827686424318178402L;
        
        private int userId;
        private transient String userName;
        
    }
    

    此时就用到了transient关键字,表示userName不参与序列化

    测试,未使用transient关键字的情况

    @Slf4j
    @Data
    public class User {
    
        private int userId;
        private String userName;
        
        public static void main(String[] args) {
            User u = new User();
            u.setUserId(1);
            u.setUserName("admin");
            log.info("json字符串:{}",JSON.toJSONString(u));
        }
    }
    

    @Slf4j是lombok注解,作用是自动生成log对象
    因为FastJson会自动序列化对象,故删除了实现Serializable的内容

    运行结果

    json字符串:{"userId":1,"userName":"admin"}

    测试,使用transient关键字的情况

    @Slf4j
    @Data
    public class User {
    
        private int userId;
        private transient String userName;
        
        public static void main(String[] args) {
            User u = new User();
            u.setUserId(1);
            u.setUserName("admin");
            log.info("json字符串:{}",JSON.toJSONString(u));
        }
    }
    

    运行结果

    json字符串:{"userId":1}

    另外

    • transient只能修饰变量且非本地变量
    • static修饰的变量不能被序列化

    测试下static的情况

    @Slf4j
    @Data
    public class User {
    
        private int userId;
        private transient String userName;
        private static String password = "qwe123";
        
        public static String getPassword() {
            return password;
        }
    
        public static void setPassword(String password) {
            User.password = password;
        }
        
        public static void main(String[] args) {
            User u = new User();
            u.setUserId(1);
            u.setUserName("admin");
            log.info("password={}",User.password);
            log.info("json字符串:{}",JSON.toJSONString(u));
        }
    }
    

    运行结果

    password=qwe123
    json字符串:{"userId":1}

    相关文章

      网友评论

          本文标题:Java基础之transient关键字

          本文链接:https://www.haomeiwen.com/subject/pkvinftx.html