public static void mian(String[]args)剖析

我們都知道java裏面 main() 方法定義必須是“public static void main(String[] 字符串數組參數名)”,那
到底是爲什麼呢?

首先我們得知道main()是程序的入口,Java中所有的函數必須屬於類,沒有什麼全局函數一說,因此main函數不能是全局成員,必須是某個類的成員。

既然main()是成員函數!則

1)public :這個字段決定了方法是否可以被外部方法調用。我們知道C語言裏面的函數是運行操作系統環境中的,可以認爲操作系統一個大的方法,這個方法調用了C語言的 main()。Java 中也是同樣的道理,只不過 Java 的 main 方法是跑在 JVM 中的。如果不限定 public,JVM 就不能調用 main 方法。

注意:在 Java SE1.4 以前是不強制 main 方法爲 public 的。當 main 方法不是 public 時,有些版本的 Java 解釋器也可以執行 Java 應用程序。Java SE1.4 及以後的版本中強制 main 方法是 public。

面向對象的語言叫方法,例如 Java。面向過程的語言叫函數,例如C語言。實際上方法就是函數,函數就是方法,只是在不同的語言不同的稱呼而已。

2)static:在C語言中,所有的函數都可以被直接調用,main 函數相當於全局方法,沒有類的概念,因爲 JVM 規定 main 方法爲入口方法,從 main 開始執行。但在 Java 中一般先要創建一個類的對象,再通過對象調用方法,但是在執行 main 方法之前創建一個對象顯然是不可能的。static 關鍵字就解決了這個問題,static 關鍵字修飾的方法可以視爲類方法,不需要創建對象就可以直接調用該方法。

3)void:由於 Java 的主方法是棧中最底層的方法,所以並不存在能夠接收的值,沒有能接收 main 方法的返回值,所以使用 void。

爲什麼 Java 不能像C語言,C++ 那樣返回 int 型值?

C語言的 main 函數的調用過程:首先,程序進入到入口方法之前,是發生了很多事情的。操作系統的安排,啓動運行時庫,運行時庫再初始化好環境,然後啓動你的入口函數,你的程序才正常的運行起來。等你的程序運行結束後,就退回到運行時庫,然後再退回到操作系統,然後系統再調度其他程序執行。因爲 main() 不是由操作系統直接調用,所以返回類型不一樣也是可以理解的。可以認爲運行時庫就是操作系統和 main 函數的中間聯繫人,在C語言中由運行時庫直接調用 main 函數,所以 main 函數的返回值也是運行時庫接收。

在 Java 中,可以認爲是操作系統→JVM→main 方法這樣的調用過程,JVM 直接調用 main 方法,所以如果 main 方法有返回值,即 JVM 接收。但是 JVM 被設計爲不接受任何返回值,所以 main 方法不能有返回值,只能 void。

4)String[]:類似於C語言中的參數 char**和int,Java 中數組可以記錄數目,所以省去了 int 類型的參數來表示字符串個數。

總結

main() 方法定義必須是:“public static void main(String[] 字符串數組參數名) ”,這是 Java 的規範。
原因就是它是一個類的成員函數,同時又是JVM程序的入口,那肯定是滿足

  1. 類未創建時就能JVM就能調用!(權限及已經分配內存)——public static
  2. main方法在棧的最底層,沒有其他函數能接受其返回值,而且JVM被設計爲不接受任何返回值——void
  3. 爲了解決命令行參數的問題,又java的數組可以記錄長度——(String []args)

所以

public static void main(String[]args){};//是java的規範

注意我們這裏是說必須要爲public,static,及void,加一個數組命令行參數!保證這些滿足的形式都行。
如一下的形式都可以:
在這裏插入圖片描述

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