美文网首页
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