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ī)范且可讀性更強。
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)文章
Spring框架基于AOP實現(xiàn)簡單日志管理步驟解析
這篇文章主要介紹了Spring框架基于AOP實現(xiàn)簡單日志管理步驟解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-06-06
SpringMVC源碼解讀之 HandlerMapping - AbstractDetectingUrlHandlerM
這篇文章主要介紹了SpringMVC源碼解讀之 HandlerMapping - AbstractDetectingUrlHandlerMapping系列初始化的相關(guān)資料,需要的朋友可以參考下2016-02-02
Java?synchornized與ReentrantLock處理并發(fā)出現(xiàn)的錯誤
synchronized機制提供了對每個對象相關(guān)的隱式監(jiān)視器鎖,并強制所有鎖的獲取和釋放都必須在同一個塊結(jié)構(gòu)中。當(dāng)獲取了多個鎖時,必須以相反的順序釋放。即synchronized對于鎖的釋放是隱式的2023-01-01
關(guān)于 Java 的數(shù)據(jù)結(jié)構(gòu)鏈表
這篇文章主要介紹了關(guān)于 Java 的數(shù)據(jù)結(jié)構(gòu)鏈表的相關(guān)資料,需要的朋友可以參考下面文章內(nèi)容2021-09-09
java實現(xiàn)利用String類的簡單方法讀取xml文件中某個標(biāo)簽中的內(nèi)容
下面小編就為大家?guī)硪黄猨ava實現(xiàn)利用String類的簡單方法讀取xml文件中某個標(biāo)簽中的內(nèi)容。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-12-12
Java Stream 的 forEachOrdered 與 forE
在Java Stream API中,forEach和forEachOrdered是兩個常用的終止操作,用于對流中的元素執(zhí)行迭代處理,本文將從多個維度深入分析Java Stream的forEachOrdered與forEach的區(qū)別與適用場景,感興趣的朋友一起看看吧2025-08-08
SpringCloudGateway?自定義局部過濾器場景分析
這篇文章主要介紹了SpringCloudGateway?自定義局部過濾器場景分析,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2025-06-06
基于springboot攔截器HandlerInterceptor的注入問題
這篇文章主要介紹了springboot攔截器HandlerInterceptor的注入問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09

