1. 程式人生 > >[java]關於main方法的一切

[java]關於main方法的一切

Table of Contents

概述

為什麼main方法必須是static的?

為什麼main方法必須是void的?

為什麼main方法必須是public的?

其他


概述

Java中的main方法,是一個java應用程式的入口,無論一個java的應用多麼複雜龐大,或是多麼的小,只要他是一個可以執行的java程式那麼必然就要有一個main方法。main方法的定義格式通常固定如下:

public static void main(String[] args){

}

我們可以在方法簽名當中加上final關鍵字,也可以修改方法的引數的定義方式,但無論如何,一個main方法必須要是static的,返回型別為void的,且是public的。為什麼java中的main方法要這麼設計和規定呢?下面我們就圍繞以下三個問題來分析java中的main方法。

為什麼main方法必須是static的?

關於static關鍵字我們知道的是,static關鍵字修飾的方法,可以不用通過建立一個例項去訪問,而是可以通過類名直接訪問。並且static修飾的方法以及變數儲存在虛擬機器當中的方法區當中,而非堆記憶體當中。

那麼,對於虛擬機器來說也是一樣的道理。main方法定義為static的,則對於虛擬機器來說,在程式啟動之後並不需要建立一個例項,就可以去呼叫這個main方法。

而如果main方法不定義為static的話,虛擬機器就需要設計成去new一個包含main方法的類的例項,再去呼叫這個main方法。這個時候就會存在一個問題,若這個類存在不止一個構造方法,虛擬機器是無法決定使用哪個構造方法去建立例項的。

當然,從我個人理解的角度,java虛擬機器可以實現為解析非static的main方法,因為它可以規定自己使用預設的構造方法去初始化一個類,然後再去呼叫main方法即可,只是這相對而言會麻煩一些。從這個層面來講我們可以認為這是java虛擬機器的一個約定。

為什麼main方法必須是void的?

void是java的main方法的返回值,理解返回值應該從方法呼叫者的角度去理解,java的main方法的呼叫者是java虛擬機器,而java虛擬機器在啟動java程式時,只需要呼叫main方法,而不需要此方法返回任何的值,因此,main方法被設計為void的。

為什麼main方法必須是public的?

Java設計了幾個訪問修飾符,包括:private,protected,public。 在Java中宣告為public的任何方法或變數都可以從該類的外部訪問。 而JVM訪問main方法顯然不是在類的內部訪問,因此main方法需要定義為public的方法。

其他

從java誕生的歷史背景來看,有的問題就會更好理解。寫過c語言程式的話,就會發現java的main方法定義事實上和c語言是十分相似的,而c語言的main方法就是需要用static關鍵字修飾。從這一角度也可以說Java這門語言在誕生之初本來就是故意設計成C程式設計師熟悉的。