2013-05-11 89 views

回答

4

非靜態字段位於每個實例中,其他位置無。

在靜態方法中,您沒有對實例的默認引用,所以方法無法知道您想要哪個實例。

問題不是地址或內存的問題,這是一個邏輯問題。

這就好像在說:「我不會迷路,我只是不知道自己在哪裏,請使用地圖來解釋它。」

+0

因此,非靜態方法對實例有默認引用? – 2013-05-11 22:04:27

+0

@KacyRaye外部類對'this'的引用在許多情況下是可選的。嵌套類也可以引用其外部類。在JVM級別,「this」作爲第一個參數傳遞給您。 – 2013-05-11 22:06:43

4

這很簡單。沒有實例,沒有任何可訪問的東西。

或者就內存而言:您嘗試訪問的內容在內存中不存在。

編輯

如果像@Alnitak以下建議,是在某個地方的實例,這不利於在所有。您需要參考特定的JVM實例才能找到它的成員。

+0

這顯然不正確。如果存在實例,則存在於內存中。但是,編譯器將拒絕讓您編寫代碼來嘗試訪問它,因爲Java不提供原始內存訪問。 – Alnitak 2013-05-11 21:48:19

+0

_無需使用字段所屬的類的實例,意味着沒有實例。 – Keppil 2013-05-11 21:49:25

+0

我讀爲「_no instance supplied_」,而不是「_no instance exists_」 – Alnitak 2013-05-11 21:51:55

0

它也是保持命名空間清晰。即使它們是靜態的,如果程序試圖訪問方法/類,你仍然會編譯錯誤。

3

拿這個程序,例如:

public class Test { 
    public static void main(String[] args) { 
     double d = Math.random(); 
     System.out.println(d); 
    } 
} 

很明顯,你可以調用Math.random()而不必創建Math類的實例; random()是一個靜態方法,這意味着它不綁定到類的實例,它可以在沒有綁定的情況下使用。因此它不能訪問Math實例的變量,因爲它應該使用哪個實例?可能有數百個或根本沒有。

靜態內部類也是如此,它們沒有綁定到外部類的實例,可以獨立創建和使用。

相關問題