2011-09-28 75 views
-4

這是一個非常基本的問題,我們很多人都不知道這個答案。在java中,要調用靜態方法,我們必須遵循這個classname.method();.但是在調用main()時,即使它是靜態的,它也不會被classname.main()調用。如何調用main方法而不用classname.mainmethod()調用它()

+5

請閱讀有關'main'方法的所有信息:http:// stackoverflow。com/questions/146576/why-is-the-java-main-method-static – michael667

+3

你可以對你的「問題」更精確一點嗎?你的意思是'main'被自動調用,所以你不必明確地自己調用它? –

回答

3

瞭解如何通過JVM調用「main()」的最佳方法是查看「java」如何調用您的主要方法。 Here是解釋相同的JNI例子。

mid = (*env)->GetStaticMethodID(env, cls, "main", "([Ljava/lang/String;)V"); 
    ... 
(*env)->CallStaticVoidMethod(env, cls, mid, args); 
0

你可以調用Java中的靜態方法,就像它們是實例方法一樣,但這被認爲是不好的做法。

public class Foo { 
    public static void bar() { ... } 
} 

... 
Foo foo = ... 
foo.bar(); // this will work 
Foo.bar(); // but this is better 
0

它被稱爲與Class.main()作爲必須提供啓動應用程序時包含main()方法,類。

2

是的。 java「解釋器」接受你給它的類名,尋找一個靜態的以String數組爲參數的方法並返回void,並調用這個方法。 Java解釋器可能會使用本機代碼來完成此操作,但這並不重要。

如果在一個程序裏面,你想調用另一個類的主要方法,你可以。 main方法在這方面不是特別的。他們唯一特別的事情是他們可以成爲Java解釋器的入口點。

0
But when comming to main(), its not been called by classname.main() even though it is static. 

你怎麼能這麼說?我怕你錯了。
不過,您可以使用對象調用靜態方法。

通常情況下,你永遠不會自己調用main.It是程序的入口點,JVM會調用它來啓動程序的執行。
這也是您在執行代碼時需要傳遞類名稱的原因。
記住這一點:

Java類名

這是你如何在命令行中執行你的計劃。這裏的ClassName是具有主要方法的Class的名稱。

此類名稱由JVM打電話給你的主要方法如ClassName.main()

而這一切的呼叫東西使用本機代碼完成C/C++。你可能想谷歌,在如果你想知道所有這些如何工作。
如果這不是你正在尋找的東西,也許你可以更多地解釋這個問題。

希望這會有所幫助。

相關問題