2012-11-14 26 views
2

如果在編譯時解析靜態方法對象實例如何能夠調用靜態方法?如何調用靜態方法在java中解析?

class StaticCall 
{ 
    public static void main(String[] args) 
    { 
     String arr[]={"Class StaticCall","calls static method of class MyMainClass"}; 

     MyMainClass h=new MyMainClass(); 
     h.main(arr);   //How is an instance able to call a static method? 
     System.out.println("this is StaticCall main"); 
    } 

} 


class MyMainClass 
{ 
    public static void main(String[] args){ 
     System.out.println(args[0]+" "+ args[1]); 
    } 
} 

運行StaticCall類之後的輸出是

類StaticCall調用類MyMainClass的靜態方法

這是StaticCall主

作爲靜態字段和方法屬於類對象如何是一個能夠調用靜態方法的實例嗎? 何時創建了Class對象,它是第一次訪問它的任何字段或方法嗎?

+2

編譯器知道類型。 –

+0

@Nambari因爲編譯器知道類型。 –

回答

14

實例如何能夠調用靜態方法?

它沒有。試試這個

MyMainClass h = null; 
h.main(arr); 

,你會看到該實例被忽略,因爲這是完全一樣的

MyMainClass.main(arr); 

爲了延長您的例子...如果你有

class AnotherMainClass extends MyMainClass 
{ 
} 

然後所有以下調用相同的方法。

AnotherMainClass amc = null; 
amc.main(args); 

((AnotherMainClass) null).main(args); 

AnotherMainClass.main(args); 

MyMainClass mmc = null; 
mmc.main(args); 

((MyMainClass) null).main(args); 

MyMainClass.main(args); 
+2

+1 for h = null;例。可能是你可以添加更多的描述,它是使用Type? – kosa

+0

簡潔明瞭的答案。謝謝 – bl3e

+1

我認爲它使用h的編譯時類型恰好是MyMainClass – bl3e

4
h.main(arr);   //How is an instance able to call a static method? 

這僅僅是MyMainClass.main(arr)的快捷方式,即靜態類型的h。這個用法經常被忽視,大多數IDE都會推薦你使用類型而不是實例。

因爲這發生在編譯時,h可以爲空

1

您可以通過classname.staticMethod甚至instance.staticMethod調用靜態方法,instance.staticMethod內部調用classname.staticMethod