Java 關(guān)鍵字transient與注解@Transient的區(qū)別用途解析
在Java中,transient 是一個關(guān)鍵字,用于聲明一個字段不會被序列化。
當(dāng)一個對象被序列化時,被聲明為 transient 的字段將不會被保存到序列化的結(jié)果中
主要用途:
敏感信息隱藏: transient 可以用于隱藏對象中的敏感信息,確保它們不會被持久化到存儲設(shè)備或通過網(wǎng)絡(luò)傳輸
臨時數(shù)據(jù): 有些字段在持久化時不需要被保存,比如緩存或臨時計算的數(shù)據(jù)
注意事項:
transient 只能用于字段,不能用于類或方法
被聲明為 transient 的字段在反序列化時會被設(shè)置為默認(rèn)值,如 null(對于對象)、0(對于基本數(shù)據(jù)類型)或 false(對于布爾類型)
序列化過程中,transient 字段的內(nèi)容不會被保存到序列化結(jié)果中
transient 只影響對象的序列化,不影響其它方面的行為,比如字段的訪問權(quán)限等。
public class Test {
public static void main(String[] args) throws IOException, ClassNotFoundException {
Person person = new Person("Alice", "123456");
// 序列化對象
FileOutputStream fileOutputStream = new FileOutputStream("序列化對象.txt");
ObjectOutputStream out = new ObjectOutputStream(fileOutputStream);
out.writeObject(person);
out.close();
// 反序列化對象
ObjectInputStream in = new ObjectInputStream(new FileInputStream("序列化對象.txt"));
Person deserializedPerson = (Person) in.readObject();
in.close();
// 輸出反序列化后的對象
// Person{name='Alice', password='null'}
System.out.println(deserializedPerson.toString());
}
}在Java的POJO中,@Transient注解的主要作用是標(biāo)記某個字段不需要被持久化到數(shù)據(jù)庫。具體來說:
與Java transient關(guān)鍵字的區(qū)別:
transient關(guān)鍵字是Java原生特性,用于標(biāo)記字段在對象序列化時(如通過Serializable接口)應(yīng)被忽略。
@Transient注解則是針對數(shù)據(jù)持久化的,僅影響ORM框架的行為,不影響序列化。
注意:JPA默認(rèn)也會忽略用transient關(guān)鍵字修飾的字段,但顯式使用@Transient注解更符合規(guī)范且可讀性更強(qiáng)。
import javax.persistence.Entity;
import javax.persistence.Transient;
@Entity
public class User {
private Long id;
private String username;
private String password;
@Transient // 該字段不會保存到數(shù)據(jù)庫
private String confirmPassword;
// Getters and Setters
}總結(jié):@Transient注解在POJO中用于標(biāo)識字段無需持久化到數(shù)據(jù)庫,常用于臨時數(shù)據(jù)或避免ORM框架的映射錯誤。注意區(qū)分它與Java transient關(guān)鍵字的不同應(yīng)用場景。
到此這篇關(guān)于Java 關(guān)鍵字transient與注解@Transient的區(qū)別的文章就介紹到這了,更多相關(guān)java transient與注解@Transient內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringMVC基于阻塞隊列LinkedBlockingQueue的同步長輪詢功能實現(xiàn)詳解
這篇文章主要介紹了SpringMVC基于阻塞隊列LinkedBlockingQueue的同步長輪詢功能實現(xiàn)詳解,本文介紹的也是生產(chǎn)者消費(fèi)者的一種實現(xiàn),生產(chǎn)者不必是一個始終在執(zhí)行的線程,它可以是一個接口,接受客戶端的請求,向隊列中插入消息,需要的朋友可以參考下2023-07-07
JavaSwing GridLayout 網(wǎng)格布局的實現(xiàn)代碼
這篇文章主要介紹了JavaSwing GridLayout 網(wǎng)格布局的實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
MyBatis-Plus:saveOrUpdate根據(jù)指定字段更新或插入方式
這篇文章主要介紹了MyBatis-Plus:saveOrUpdate根據(jù)指定字段更新或插入方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-04-04
SpringBoot配置Ollama實現(xiàn)本地部署DeepSeek
本文主要介紹了在本地環(huán)境中使用?Ollama?配置?DeepSeek?模型,并在?IntelliJ?IDEA?中創(chuàng)建一個?Spring?Boot?項目來調(diào)用該模型,文中通過圖文示例介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-03-03
詳解Spring MVC3返回JSON數(shù)據(jù)中文亂碼問題解決
本篇文章主要介紹了Spring MVC3返回JSON數(shù)據(jù)中文亂碼問題解決,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-01-01

