1. 程式人生 > 其它 >java中main函式解析

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與其它型別進行連結然後初始化。連結包含三個階段:檢驗,準備和解析。檢驗檢查被裝載的主類的符號和語義,準備則建立類或介面的靜態域以及把這些域初始化為標準的預設值,解析負責檢查主類對其它類或介面的符號引用,在這一步它是可選的。類的初始化是對類中宣告的靜態初始化函式和靜態域的初始化構造方法的執行。一個類在初始化之前它的父類必須被初始化。整個過程如下:

參考連結:https://www.cnblogs.com/xwdreamer/archive/2012/04/09/2438845.html