天天看點

java中main函數解析

從寫java至今,寫的最多的可能就是主函數

但是以前一直都沒有問自己,為什麼要這麼寫,因為在c語言中就沒有這樣子的要求。其實這是一個不需要解釋的問題,因為java标準就是這麼規定的,那麼既然是java标準規定的,我們按照規定來執行就好了。不過,這并不是一個很好的學習态度,如果總是知其然而不知其是以然,總會對java有種隔膜的感覺。就是發現問題了,不去解決,不去了解為什麼,心裡總是會有牽絆。今天既然自己都這麼問自己了,為什麼java的主函數要按照這個格式來寫,那麼我就得弄明白為什麼。

在java中,main()方法是java應用程式的入口方法。java虛拟機通過main方法找到需要啟動的運作程式,并且檢查main函數所在類是否被java虛拟機裝載。如果沒有裝載,那麼就裝載該類,并且裝載所有相關的其他類。是以程式在運作的時候,第一個執行的方法就是main()方法。通常情況下, 如果要運作一個類的方法,必須首先執行個體化出來這個類的一個對象,然後通過"對象名.方法名()"的方式來運作方法,但是因為main是程式的入口,這時候還沒有執行個體化對象,是以将main方法聲明為static的,這樣這個方法就可以直接通過“類名.方法名()”的方式來調用。

 虛拟機通過調用某個指定類的方法main啟動,傳遞給main一個字元串數組參數,使指定的類被裝載,同時連結該類所使用的其它的類型,并且初始化它們。例如對于程式:

<a></a>

 編譯後在指令行模式下鍵入: java HelloApp run virtual machine

  将通過調用HelloApp的方法main來啟動java虛拟機,傳遞給main一個包含三個字元串"run"、"virtual"、"machine"的數組。現在我們略述虛拟機在執行HelloApp時可能采取的步驟。

  開始試圖執行類HelloApp的main方法,發現該類并沒有被裝載,也就是說虛拟機目前不包含該類的二進制代表,于是虛拟機使用ClassLoader試圖尋找這樣的二進制代表。如果這個程序失敗,則抛出一個異常。類被裝載後同時在main方法被調用之前,必須對類HelloApp與其它類型進行連結然後初始化。連結包含三個階段:檢驗,準備和解析。檢驗檢查被裝載的主類的符号和語義,準備則建立類或接口的靜态域以及把這些域初始化為标準的預設值,解析負責檢查主類對其它類或接口的符号引用,在這一步它是可選的。類的初始化是對類中聲明的靜态初始化函數和靜态域的初始化構造方法的執行。一個類在初始化之前它的父類必須被初始化。整個過程如下:

本文轉自xwdreamer部落格園部落格,原文連結:http://www.cnblogs.com/xwdreamer/archive/2012/04/09/2438845.html,如需轉載請自行聯系原作者