1.1 靜態方法main()的解析
1.1.1 靜態方法main()的語句組成
在我們使用java語言進行編程中,常常用到要一個main()函數,這是一個程序的入口,是整個程序中最爲重要的部分之一。通常,main函數按照以下格式進行書寫。
public static void main(String[] args) { }
我們發現main()函數前面存在靜態修飾符Static那說明main函數就是一個靜態方法。那麼這個main函數語句到底由什麼組成呢?下面我們就來分析一下main函數語句的組成。
1、 關鍵字public,這代表main函數的權限是最大的“public”。
2、 關鍵字static,這代表main函數是一個靜態方法。
3、 關鍵字void,這代表main函數沒有返回值。
4、 main,這代表函數名,不可更改。更改後就不在是主函數,而是自定義方法。
5、 String[],這代表main函數的參數類型是字符型數組
6、 args,這是參數名,也是主函數中唯一能夠修改的。
1.1.2 args到底是什麼?
main()主函數在運行過程中,Java虛擬機會往main()主函數傳遞參數,那麼java虛擬機到底傳遞了什麼樣的參數?爲了弄清楚這個問題,我們需要修改一下main主函數,還是以Car類作爲例子:
public class Car { public static void main(String[] args) { System.out.println(args); System.out.println("args數組長度爲:"+args.length); } }
運行結果如下:
[Ljava.lang.String;@98385c
args數組長度爲:0
現在來分析一下運行結果,第一行中“[Ljava.lang.String”表示對象的類型爲字符串數組,“@98385c” 表示對象的哈希值。第二行表示args數組的長度爲0。也就是說java虛擬機向main函數中傳遞了一個數組爲長度爲0的字符串數組。
1.2 靜態方法怎麼樣調用方法?
在前面我們介紹了靜態方法main(),在靜態方法main()中常常需要調用各種方法,這其中包括靜態方法和非靜態方法。對於這兩種方法,靜態方法main()如何調用。當我們需要調用的方法是靜態方法時,非常簡單,直接調用即可,以下面代碼爲例:
public class Car { public static void stop() { System.out.println("汽車停了下來。"); } public staticvoid main(String[] args) { stop(); } }
運行結果如下:
汽車停了下來。
如果main()函數調用非靜態方法時,應該如何使用?首先我們將靜態stop()改爲非靜態方法,看看會出現什麼情況。代碼如下:
public class Car { public void stop() { System.out.println("汽車停了下來。"); } public staticvoid main(String[] args) { stop(); } }
編譯時會發現報錯。
報錯內容:Cannotmake a static reference to the non-static method stop() from the type Car
這說明當一個方法不是靜態方法時,靜態方法main()不能夠直接調用。那麼該如何調用非靜態方法呢?我們將代碼按照以下方式修改。
public class Car { public void stop() { System.out.println("汽車停了下來。"); } public staticvoid main(String[] args) { newCar().stop(); } }
運行結果如下:
汽車停了下來。
這說明,靜態方法main()可以通過構建對象來調用非靜態方法。那麼如果不是main()主函數還是一般靜態方法是不是一樣可以調用非靜態方法呢?我們以一下代碼爲例。
public class Car { voidrun(){ System.out.println("汽車開動!"); } public static void stop() { System.out.println("汽車停了下來。"); newCar().run(); } public static void main(String[] args) { stop(); } }
運行結果如下:
汽車停了下來。
汽車開動!
從運行結果我們可以得知,普通靜態方法與main()方法通過一樣的方式來調用非靜態方法。