大話java基礎知識一之為什麼java的主函數入口必須是public static void。本站提示廣大學習愛好者:(大話java基礎知識一之為什麼java的主函數入口必須是public static void)文章只能為提供參考,不一定能成為您想要的結果。以下是大話java基礎知識一之為什麼java的主函數入口必須是public static void正文
為什麼java的主函數入口必須是public static void main (String[] args);
很多寫javaEE好幾年的程序員經常會記得java的主函數就是這麼寫的,但實際上為什麼這麼寫大都已經忘記。
由於每天被各種框架,各種技術包圍,所以出現了一種知道怎麼用但不知道為什麼這麼用的情況。
java的主函數是一個java基礎知識的大綜合,在面試中,從這裡就能看出程序員的基礎知識掌握程度。
一、是不是所有的類都可以有主方法?如果是,為什麼?如果不是,那麼在什麼類中可以有主方法。
首先我們可以看到程序都是寫在一個以.java結尾的文檔中的,但是一個.java的文檔並不是只能存在一個類,它裡面可以存在很多類
但是並不是所有的類都可以有主方法的。只有在此類名與文檔名相同的情況下,才可以在此類中存在主函數。如果文件中只有一個類,文件名必須與類名一致
二、為什麼主函數要寫public
這是java修飾符的知識,java中共有四種訪問限制修飾符:private,public,protected,default
private:私有,內部訪問
public:共有,都可以訪問
default:同一個包可以訪問
protected:同一個包或者子類可以訪問
需要注意的是,由於訪問限制修飾符的存在,所以會有一些默認的規則,保證jvm的安全
1.java保存的文件名必須與類名一致;
2.如果文件中只有一個類,文件名必須與類名一致;
3.一個Java文件中只能有一個public類;
4.如果文件中不止一個類,文件名必須與public類名一致;
5.如果文件中不止一個類,而且沒有public類,文件名可與任一類名一致。
而主函數必須用public修飾,由於一個文件中只能有一個public,所以需要讓主函數使用public作為類的對外接口,供jvm使用。
三、主函數的static
java的static是一個關鍵字,也是作為java類中方法的修飾符。
static表示“全局”或者“靜態”的意思,用來修飾成員變量和成員方法,也可以形成靜態static代碼塊,但是Java語言中沒有全局變量的概念。
1、static變量
按照是否靜態的對類成員變量進行分類可分兩種:一種是被static修飾的變量,叫靜態變量或類變量;另一種是沒有被static修飾的變量,叫實例變量。
用public修飾的static成員變量和成員方法本質是全局變量和全局方法,當聲明它類的對象時,不生成static變量的副本,而是類的所有實例共享同一個static變量。可用類名直接訪問,一旦靜態變量被修改,其他實例均對修改可見,故線程不安全。因為static變量獨立於任何實例,因此static變量必須被實現,而不能是抽象的abstract。在接口中,static變量默認被限制位static final修飾
2、static方法
靜態方法可以直接通過類名調用,不需要創建實例,因此靜態方法中不能用this和super關鍵字,不能直接訪問當前類的實例變量和實例方法(因為它們都還沒被加載)。只能訪問當前類的靜態成員變量和成員方法。因為static方法獨立於任何實例,因此static方法必須被實現,而不能是抽象的abstract。
3、static代碼塊
static代碼塊也叫靜態代碼塊,是在類中獨立於類成員的static語句塊,可以有多個,位置可以隨便放,它不在任何的方法體內,JVM加載類時會執行這些靜態的代碼塊,如果static代碼塊有多個,JVM將按照它們在類中出現的先後順序依次執行它們,每個代碼塊僅僅只會被執行一次。
所以java的主函數入口被修飾成static以便在不用創建類的實例時,就可以調用。
四、void無返回值的
這裡是方法的副作用和返回值類型
一個方法的執行,如果在返回一個值之外還導致某些外部“狀態”發生變化,則稱該方法產生了副作用。這裡所謂“狀態”發生變化,可以是實例域或靜態變量被修改
1.沒有返回值的方法必然有副作用,除非它的方法體是空的或者方法沒有意義。所以,沒有返回值的方法、有返回值但有副作用的方法稱為過程
2.有返回值而且沒有副作用的方法稱為函數(function)。
由於java的主函數是棧中最底層的函數,所以並不存在能夠接收的值,所以使用void,無返回的
五、main方法名(注意是main,很多初學者都會寫成mian,這是不一樣的)
main是java主方法的方法名,是不能被改變的,就算錯了一個字也是不可以運行的。
由於java中有關鍵字(保留字)存在的機制,所以main也類似與一個關鍵字(但不是),jvm運行時,只會找符合要求的main單詞,所以將main改變後,jvm將找不到主入口,方法將不能執行。當然,main也可以作為方法名存在。也可以作為變量名存在。
在一個類中可以存在多個main方法,這是方法的重載。在名字相同的同時,必須有不同的參數。不允許參數完全相同而只是返回值不同的情況出現。無法進行編譯,程序在eclips中顯示錯誤
六、String數組的參數
java語言是可以在命令行進行編輯執行的(我估計應該沒人在這裡玩吧)。這裡可以了解到關於java的基本類型和應用類型。
8種基本類型
一、4種整型
byte 1字節 -128——127
short 2 字節 -32,768 —— 32,767
int 4 字節 -2,147,483,648 ——2,147,483,647(超過20億)
long 8 字節 -9,223,372,036,854,775,808——9,223,372,036854,775,807
注釋:java中所有的數據類所占據的字節數量與平台無關,java也沒有任何無符號類型
二、 2種浮點類型
float 4 字節 32位IEEE 754單精度(有效位數 6 – 7位)
double 8 字節 64位IEEE 754雙精度(有效位數15位)
三、1種Unicode編碼的字符單元
char 2 字節 整個Unicode字符集
四、1種真值類型
boolean 1 位 True或者false
3種引用類型
類class
接口interface
數組array
我們在命令行輸入是不管是什麼字符都是一個字符串類型,如數字1可以是字符串“1”等等。所以用字符串的數組類型來裝