喲呵,今天俺要來(lái)分享一下 Java 中的一個(gè)關(guān)鍵字——transient。這個(gè)詞其實(shí)挺好理解的,就是“瞬間的,短暫的,過(guò)渡的”之類(lèi)的意思。但是在 Java 的世界里,它可不是這么簡(jiǎn)單啊。
先來(lái)說(shuō)一下這個(gè)關(guān)鍵字的作用吧。在 Java 中,所有的對(duì)象都可以被序列化(serialization),也就是說(shuō)可以被轉(zhuǎn)換成一系列的字節(jié),然后存儲(chǔ)在某個(gè)地方或者進(jìn)行網(wǎng)絡(luò)傳輸。但是有些時(shí)候,我們并不希望某些對(duì)象的某些屬性被序列化,比如密碼、數(shù)據(jù)庫(kù)連接等等。這時(shí)候就可以用到 transient 關(guān)鍵字了,它可以讓某個(gè)屬性“暫時(shí)失效”,即在序列化時(shí)被忽略掉,等到反序列化時(shí)再重新讀取此屬性的值。這樣做的好處就是可以保護(hù)敏感信息的安全性。
等等,你可能要問(wèn)了,為啥不直接用 private 關(guān)鍵字修飾敏感屬性呢?其實(shí)是因?yàn)?private 并不能完全阻止對(duì)象的序列化,只是讓其屬性無(wú)法在對(duì)象外部訪問(wèn)而已。如果你真的在一個(gè)不可靠的環(huán)境下,比如網(wǎng)絡(luò)傳輸,還是有可能被這樣的人攻擊竊取你的信息的。transient 才是真正的絕招。
舉個(gè)例子吧,比如說(shuō)你正在做一個(gè)密碼管理器,里面有一個(gè) User 類(lèi)用來(lái)保存用戶(hù)信息,其中密碼就是敏感信息。如果你直接把密碼作為 User 類(lèi)中的一個(gè)屬性,那么有可能會(huì)被序列化到文件中或者被網(wǎng)絡(luò)傳輸,造成泄露。但是如果你把密碼屬性加上 transient 關(guān)鍵字,這樣就保護(hù)了該屬性,序列化時(shí)會(huì)自動(dòng)忽略掉,等到要用到密碼的時(shí)候再重新讀取一遍就行了。
不過(guò)需要注意的是,transient 關(guān)鍵字只能用于普通變量,不能用于 static 變量。因?yàn)?static 修飾的變量不屬于對(duì)象的屬性,而是屬于整個(gè)類(lèi)的。另外,transient 關(guān)鍵字也不能用于本地變量和方法參數(shù)。
好了,今天的分享就到這里啦。 當(dāng)然,這只是 transient 關(guān)鍵字的一個(gè)應(yīng)用場(chǎng)景,它還有其他的用途,比如在 RMI(Remote Method Invocation)中使用,為了避免某些對(duì)象的狀態(tài)被復(fù)制到客戶(hù)端,可以把這些狀態(tài)用 transient 關(guān)鍵字修飾掉,這樣就只有服務(wù)器端能夠看到這些狀態(tài)了。所以,學(xué)會(huì)使用 transient 關(guān)鍵字是很重要的哦! www.cppxvbw.com.cn 寧波海美seo網(wǎng)絡(luò)優(yōu)化公司 是網(wǎng)頁(yè)設(shè)計(jì)制作,網(wǎng)站優(yōu)化,企業(yè)關(guān)鍵詞排名,網(wǎng)絡(luò)營(yíng)銷(xiāo)知識(shí)和開(kāi)發(fā)愛(ài)好者的一站式目的地,提供豐富的信息、資源和工具來(lái)幫助用戶(hù)創(chuàng)建令人驚嘆的實(shí)用網(wǎng)站。 該平臺(tái)致力于提供實(shí)用、相關(guān)和最新的內(nèi)容,這使其成為初學(xué)者和經(jīng)驗(yàn)豐富的專(zhuān)業(yè)人士的寶貴資源。
聲明本文內(nèi)容來(lái)自網(wǎng)絡(luò),若涉及侵權(quán),請(qǐng)聯(lián)系我們刪除! 投稿需知:請(qǐng)以word形式發(fā)送至郵箱18067275213@163.com
見(jiàn)過(guò)做SEO的沒(méi)見(jiàn)過(guò)這么小的真張見(jiàn)識(shí)了ZAC的BLOG缺少表情啊