更新時(shí)間:2023-08-23 來(lái)源:黑馬程序員 瀏覽量:
不可變對(duì)象(Immutable Object)是指一旦創(chuàng)建后,其狀態(tài)就不能被修改或改變的對(duì)象。在Java中,不可變對(duì)象具有以下特征:
1.狀態(tài)不可變性(State Immunity):對(duì)象的屬性值不能被修改。
2.線程安全性(Thread Safety):由于不可變對(duì)象的狀態(tài)不能改變,多線程訪問(wèn)時(shí)不需要額外的同步措施,因此是線程安全的。
3.安全性(Security):不可變對(duì)象的值不能被惡意修改,因此適用于安全敏感的上下文。
4.可重用性(Reusability):由于不可變對(duì)象的狀態(tài)不變,可以在不擔(dān)心副作用的情況下多次使用。
通過(guò)將類(lèi)聲明為final,防止其他類(lèi)繼承該類(lèi),從而防止子類(lèi)修改其狀態(tài)。
確保屬性不能被外部直接訪問(wèn),并且一旦賦值后就不能再修改。
不要提供修改對(duì)象狀態(tài)的方法,包括setter方法。
提供方法來(lái)獲取對(duì)象的屬性值,但不要提供方法來(lái)修改屬性值。
以下是一個(gè)示例,演示如何創(chuàng)建一個(gè)不可變的Java類(lèi):
public final class ImmutablePerson { private final String name; private final int age; public ImmutablePerson(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } }
在這個(gè)示例中,ImmutablePerson類(lèi)具有兩個(gè)私有的final屬性,它們只能在構(gòu)造函數(shù)中初始化,并且沒(méi)有提供修改它們的方法。因此,ImmutablePerson是一個(gè)不可變對(duì)象,一旦創(chuàng)建就不能修改其狀態(tài)。
通過(guò)遵循上述模式,我們可以創(chuàng)建不可變對(duì)象,這有助于確保代碼的可維護(hù)性、線程安全性和安全性。
字符集是什么?Unicode字符集和ASCII字符集
2023-08-22Java中創(chuàng)建線程3種方式的對(duì)比?_java基礎(chǔ)培訓(xùn)
2023-08-22ls命令怎么使用?Linux命令基礎(chǔ)結(jié)構(gòu)
2023-08-21Java中使用線程的5個(gè)最佳實(shí)踐_java基礎(chǔ)培訓(xùn)
2023-08-21String是最基本的數(shù)據(jù)類(lèi)型嗎?_java培訓(xùn)入門(mén)
2023-08-18POI能用來(lái)做什么?利用POI導(dǎo)出運(yùn)營(yíng)數(shù)據(jù)Excel報(bào)表
2023-08-17