Java中main方法解析

作者:xwdreamer
歡迎任何形式的轉載,但請務必註明出處。


java中main函數解析

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

public static void main(String[] args) {}

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

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

實例

 虛擬機通過調用某個指定類的方法main啓動,傳遞給main一個字符串數組參數,使指定的類被裝載,同時鏈接該類所使用的其它的類型,並且初始化它們。例如對於程序:

複製代碼
public class HelloApp {
    public static void main(String[] args) {
        System.out.println("Hello World!");
        for (int i = 0; i < args.length; i++) {
            System.out.println(args);
        }
    }
}
複製代碼

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

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章