第一課—或技巧,這取決於你怎麼看它這個問題的—是,只有一個main
方法是特殊的,不管main
方法多少都存在。特殊的一個是一個的形式爲
public static void main(/* multiple arguments */) { ... }
在過去,參數必須是String[] args
,但最近的版本,無功ARG遊戲也是可以接受的(例如String... args
)。 JLS 12.1.4
現在我們知道以哪種方法開始,我們看到第一行檢查值爲a
。我們看到它已初始化爲1,因此我們可以忽略a==2
行。然後,在下一行中,我們跳轉到無參數main
。
在無參數main
中,a
設置爲2.下一課是方法 - 局部變量可以隱藏類變量。一個新的a
被聲明,並且它在該方法內部優先,但只要該方法一直存在。它是一個大小爲10的字符串數組,但只有第一個被設置(「Hi2」)。在這個方法中還有一個教訓:這段代碼是爲了讓你認爲string-arg main
接下來被調用,但它沒有,因爲我們沒有創建一個對象,它不是static
。相反,我們回到main(String[] args)
。
這一次,a
是2 —記住,我們將它的無參數main
和a
是static
這樣的變化支左右—所以我們打印的第一個參數,「HI2。」接下來,我們將a
設置爲3,所以即將到來的a==1
測試失敗。在下面的行,我們打印「HI1」首次開創PlayingWithMain
,我認爲一個新的實例是,整個代碼片段家住類。
由於a
爲static
,其價值甚至保持3爲新的對象。但是,由於該對象正在呼叫main("Hi3")
,因此我們不會去static
版本的main
;相反,我們轉到string-arg main
。該方法只是將輸入返回給調用者,並立即打印出來。
這對於string-array-arg main
是這樣,所以我們回到調用它的方法,no-arg main
。它也完成了,所以我們再次回到JVM調用的main(String[] args)
版本。請記住,我們剛剛完成該行
if (a==1) { main(); }
因此我們再次打印「Hi1」。最後,我們重複最後一行,它會創建另一個新的PlayingWithMain
對象,並最後一次打印「Hi3」。
只需用筆和紙追蹤執行情況。 (該代碼是可怕的btw。) – Mat 2012-02-26 15:37:01
或者你可以使用任何IDE,如eclipse,netbeans等調試該程序。它會幫助你更容易理解。 – 2012-02-26 15:40:53