java裡為什麼主函式前面要加static修飾

2021-06-16 11:49:39 字數 1015 閱讀 4754

先說一下static

1.static 修飾的域,我們叫靜態域,它是歸類所有的,被所有物件所共享,只有乙個

2.static修飾的區塊,域只會初始化一次

3.static修飾的域或方法,可以直接通過類的名字加上.進行呼叫

4.static修飾的方法內不能直接使用非靜態成員

static關鍵字,告知編譯器main函式是乙個靜態函式。也就是說main函式中的**是儲存在靜態儲存區的,靜態方法在記憶體中的位置是固定的,即當定義了類以後這段**就已經存在了。如果main()方法沒有使用static修飾符,那麼編譯不會出錯,但是如果你試圖執行該程式將會報錯,提示main()方法不存在。因為包含main()的類並沒有例項化(即沒有這個類的物件),所以其main()方法也不會存。而使用static修飾符則表示該方法是靜態的,不需要例項化即可使用。

main方法是乙個程式的入口,如果寫成非靜態的,那麼就必須例項化乙個物件再來呼叫它,既然是入口這樣肯定是不可以的;靜態方法是屬於類的,直接用類名就可以呼叫         

static方法不需要建立物件 可以直接訪問 這樣main方法就不需要做特殊處理

static方法在靜態資料區中,這樣就可以直接呼叫不需要每次呼叫都要重新生成。

靜態函式在呼叫時不用例項化

靜態,一上來就裝入記憶體 

main函式其實也是所在類的乙個方法,就比如乙個類是test,那麼該類的main其實就是test.main(string args),眾所周知如果乙個方法不是靜態的,則要先例項化該類,比如要這樣 test t=new test(); 然後才能呼叫 test.main(); 

而這對於執行乙個程式的主函式來說是不現實的,所以比如把main函式定義為static,使test.main()可以直接被呼叫。 

因為main就是這個類的主函式,入口,如果每次進這個入口的時候再去例項話然後再去呼叫這個入口方法,就很羅嗦 。

注:以上很多事網上查來的,最精彩的解答是在csdn上,乙個問題引發的深邃的回答,最後亞里斯多德都出來了,有興趣的圍觀吧

為什麼要加 include stdafx h

所謂標頭檔案預編譯,就是把乙個工程 project 中使用的一些mfc標準標頭檔案 如windows.h afxwin.h 預先編譯,以後該工程編譯時,不再編譯這部分標頭檔案,僅僅使用預編譯的結果。這樣可以加快編譯速度,節省時間。預編譯標頭檔案通過編譯stdafx.cpp生成,以工程名命名,由於預編...

scanf函式輸入時為什麼要加

對於scanf函式,它將引數視為乙個位址,將鍵盤輸入的字元傳到這個位址中去,通常我們都是用的 位址的符號,事實上如果乙個值恰好是乙個位址的話,不加 也一樣可以的 如下例 測試環境為win7 64位 include void main int n 0x18ff48 int m 0x18ff44 檢視此...

java為什麼要註解?

根據一般說法 編寫文件 通過 裡標識的元資料生成文件 生成文件doc文件 分析 通過 裡標識的元資料對 進行分析 使用反射 編譯檢查 通過 裡標識的元資料讓編譯器能夠實現基本的編譯檢查 override 就是給 新增一些元資料,描述資訊,這些描述資訊可以在允許時通過api獲取到,然後針對這些註解進行...