2012-05-09 131 views
1

我剛剛在一篇文檔中讀到「靜態方法只能調用其他靜態方法,並且無法從中調用非靜態方法」。但是當我試圖測試它時,我認爲看到了不同的東西。關於靜態關鍵字的困惑

我有如下

import pckage1.*; 

public class C 
{ 

public static void main(String par[]) 
{  
} 
public static void cc() 
{ 
    A ob = new A(); 
    ob.accessA(0);  
} 

} 

其中A類是

package pckage1; 

public class A 
{ 
public A() 
{ 
} 
public void accessA(int x) 
{ 
} 

} 

現在,這裏從cc靜態方法在C類中描述的C類,非靜態方法輔助系列()被調用。如果關於靜態方法的陳述是真實的,那怎麼可能呢?

+1

[靜態方法訪問非靜態構造函數?]的可能重複?(http://stackoverflow.com/questions/10513633/static-method-access-to-non-static-constructor) –

回答

5

靜態方法只能調用其他的靜態方法,不能從它

這是錯誤調用非靜態方法。

靜態方法可以調用非靜態方法,只要他們有對象調用的方法上(如您在您的代碼段發現的)。如何調用非靜態方法有沒有

不能從一個靜態方法來nonStaticFoo(),因爲它被解釋爲this.nonStaticFoo()和因爲在一個靜態方法沒有this可用。

從今天早些時候非常類似的問題:

1

你調用一個實例方法,對一個實例 - you're不是試圖直接調用一個實例方法。

0

您正在創建類A的實例並調用其上的方法。 所以你調用的方法是實例方法(不是靜態方法)。 但是,您不能調用C類的非靜態方法。

2

您沒有調用Class的非靜態方法。

嘗試這樣的:

import pckage1.*; 

public class C 
{ 

public static void main(String par[]) 
{  
} 
public static void cc() 
{ 
    A ob = new A(); 
    ob.accessA(0); 
    print();  
} 

public void print() 
{ 

} 
} 

它不會工作,因爲你是從一個靜態方法callign非靜態方法,而你沒有C級的實例工作用你的靜態方法。

2

由於每個Java程序都是從靜態方法開始執行的,如果您引用的語句爲真,那麼任何Java程序都無法執行實例方法!

2

靜態方法在C中沒有默認上下文,而不是this

但是,任何方法都可以使用類的intsnace來調用方法。