Java基础之transient关键字

在开发过程中经常会用到序列化,此时就需要实现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}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容