2013-05-28 143 views
0

我知道我們不能在static方法中使用this關鍵字,但我很困惑爲什麼我們不能在static blocksstatic methods內使用this。即使是與super()相同的情況。任何人都可以闡明這一點嗎?此關鍵字和靜態

感謝

+0

「靜態」模塊在調用其中一個「類」構造函數之前執行。所以沒有可以被'this'引用的對象 –

回答

3

thissuper分別指當前實例和父實例。

在任何static上下文中,無論是static block還是static method,都沒有實例參考,因此不允許使用關鍵字。

super()是對父實例的無參數構造函數的調用,並且只允許作爲構造函數中的第一條語句,從而使其不會出現在任何靜態上下文中。

0

靜態方法和塊,顧名思義,鏈接到類,而不是這個類的任何實例。

由於this引用了當前對象實例,所以在任何靜態初始化塊或方法中都不能使用它是完全正常的。

0

因爲這指向類的一個實例,所以在靜態方法/塊中沒有實例。

0

根據Oracle

在實例方法或構造,this是將 當前對象的引用 - 其方法或構造是被 調用的對象。

因此,在靜態類中,您沒有實例變量 - 創建對象。這就是爲什麼你不能使用this關鍵字

3

按照doc

在實例方法或構造,這是對 當前對象的引用 - 它的方法或構造正在 調用的對象。您可以使用此方法從 實例方法或構造函數中引用當前對象的任何成員。

但是靜態方法與Class沒有關係到對象。在靜態方法中你沒有任何實例。

0

例如,靜態塊可用於初始化靜態變量。

靜態方法不在實例範圍內工作。

兩者都只與類有關,並且與該類的實例無關。

0

爲了回答這個問題,我們應該考慮什麼靜態方式 - 這意味着這個位被放在內存中的「靜態」位置,它只存在一次。

所以每個類都有靜態位和非靜態位。靜態位存在一次,非靜態位可以存在多次(即許多不同的實例)。 'this'這個詞可以被認爲是'這個版本的非靜態位'的簡寫。

在靜態上下文中,我們沒有要引用的非靜態位的版本(或者更確切地說,我們不知道應該引用哪個版本!),所以我們沒有這個。 super可以做出同樣的說法。