為什麼Java內部類要設計成靜態和非靜態兩種?

時間 2021-05-08 06:36:19

1樓:王二

除了邏輯和可讀性上的需求之外。也實現了單例模式下對資源的優化。

比如 Math 裡的 RandomNumberGeneratorHolder 就是靜態內部類。

2樓:BWH.Steven

我們所知道static是不能用來修飾類的,但是成員內部類可以看做外部類中的乙個成員,所以可以用static修飾,這種用static修飾的內部類我們稱作靜態內部類,也稱作巢狀內部類.

特點:不能使用外部類的非static成員變數和成員方法解釋:非靜態內部類編譯後會預設的儲存乙個指向外部類的引用,而靜態類卻沒有。

簡單理解

即使沒有外部類物件,也可以建立靜態內部類物件,而外部類的非static成員必須依賴於物件的呼叫,靜態成員則可以直接使用類呼叫,不必依賴於外部類的物件,所以靜態內部類只能訪問靜態的外部屬性和方法。

class

Outter

static

class

Inner}}

public

class

Test}

3樓:wuxinliulei

你也清楚的將靜態內部類和非靜態內部類的區別都寫出來了。

靜態內部類的作用:只是為了降低包的深度,方便類的使用,靜態內部類適用於包含類當中,但又不依賴與外在的類,不用使用外在類的非靜態屬性和方法,只是為了方便管理類結構而定義。在建立靜態內部類的時候,不需要外部類物件的引用。

非靜態內部類有乙個很大的優點:可以自由使用外部類的所有變數和方法

4樓:llitfkitfk

簡單理解就是:如果把模擬喻成雞蛋,內部類為蛋黃,外部類是蛋殼。那麼靜態類相當於熟雞蛋,就算蛋殼破碎(外部類沒有例項化),蛋黃依然完好(內部類可以例項化);而非靜態類相當於生雞蛋,蛋殼破碎(無例項化),蛋黃也會跟著xx(不能例項化)。

5樓:

Inner類的例項有Outer的例項的指標(即可以訪問Outer的成員)。而StaticInner類沒有。之所以設計成這樣,是因為他們區別還是挺大的,應用場景不同。

java中匿名內部類的特點是什麼

Unavailable 匿名內部類 重點 匿名內部類 是內部類的簡化寫法。它的本質是乙個帶具體實現的父類或者父介面的匿名的子類物件。開發中,最常用到的內部類就是匿名內部類了。以介面舉例,當你使用乙個介面時,似乎得做如下幾步操作,1.定義子類 2.重寫介面中的方法 3.建立子類物件 4.呼叫重寫後的方...

為什麼一定要弄乙個Builder內部類?

巽澤淵 其實所有的設計模式都可以認為是無用功.拿Builder模式來說,樓主寫的也是一種builder嘛!怎麼爽怎麼構造,哪個都不差。直到有一天我需要寫乙個不可變類的時候. 小戀 因為這個通常用於不可變物件。建立不可變物件是乙個好習慣,可以保證執行緒安全。為了建立乙個不可變物件,你必須在這個物件初始...

IPV6為什麼要設計成這個樣子?

小智IT課堂 IPv6位址是128位,16個位元組,如果按IPv4點分十進位制的方法,乙個位元組用十進位制數表示為一組,需要分成16組。小智覺得設計者可能是覺得分得太長,所以是按照兩個位元組一組,但是兩個位元組範圍是0 65535,也不好用十進位制數表示了,另外,這麼長的位址,也別想人很容易記住了,...