普通方法是物件的方法,static是類方法。類載入在前,物件例項化在後。
1、關於,main方法是static方法,但是為什麼非要是static。原因就是,如果乙個類它定義了main方法的話,那麼她的main方法會在這個類的建構函式執行之前被呼叫。
由於main方法執行的時候尚未在jvm裡生成相應物件(建構函式未被執行),所以要宣告為static。
2、這就涉及到下面的問題,和其他任何方法一樣,static方法可以建立或使用與其它型別相同的被命名物件,因此,static方法常常拿來做『牧羊人』的角色,負責看護與其隸屬同一型別的例項群。」
其實作者的意思是說,按照gof(模式四人幫)的觀點,單例項工廠類的生產方法,應該是static的。
關於『牧羊人』的意思是指,在物件導向的語言裡,最高端首先是元類,元類(meta class)下面是類,類下面才是物件。對於虛擬機器來說,類是元類的物件,static方法是類的方法,而不是物件的方法。
所以,物件就相當於「羊」,類就相當於「羊圈」盛放和標示「羊」,拿出來乙隻羊,就要問問,你是哪個羊圈裡的?
static方法相當於「羊圈裡的狗」,專門來管理羊。
而元類才是幕後的『牧羊人』。
thinking作者本科是讀物理的,後來才轉過來讀軟體工程(那時候學的是c),可能是半路出家的原因,對物件導向的機制,在理解上有出入。
3關於,「static方法就是沒有this的方法」這句話其實這句話是廢話,this是物件的引用。而static方法是乙個類的方法,不是哪個特定物件的方法,所以在static方法裡使用this引用沒意義。
4關於static方法和static屬性是不是儲存在乙個地方的。
我可以負責任的說,他倆肯定不能存到同乙個記憶體位址裡面去,虛擬位址除外。
其實他們倆不屬於哪個特定的物件,所以不會出現在為哪個特定物件分配的記憶體塊裡。
剛才說了,static方法和static屬性屬於類,所以他倆是被存到相應的類的記憶體空間裡。
為什麼類還有自己的記憶體空間?是因為特定的類是特定的元類的物件。也就是說,類是某個其它類的物件。而這個元類並未開放給應用程式設計師。
其實static是個非常古老的關鍵字,古老到比這裡大部分朋友的年齡還老。
Java中static方法疑惑
1 關於,main方法是static方法,但是為什麼非要是static。原因就是,如果乙個類她定義了main方法的話,那麼她的main方法會在這個類的建構函式執行之前被呼叫。由於main方法執行的時候尚未在jvm裡生成相應物件 建構函式未被執行 所以要宣告為static。2 這就涉及到下面的問題,和...
關於Java中的static關鍵字
static 主要修飾一下四種情況 變數 所謂 class variable 方法 所謂 class method 塊 所謂 block 內部類 所謂 nested class 凡是被 static 修飾的這四種元素,都屬於class的元素,即類的,而不是類的例項的。1.靜態變數 靜態變數被該類的所...
Java 中的 static 使用之靜態方法
與靜態變數一樣,我們也可以使用 static 修飾方法,稱為靜態方法或類方法。其實之前我們一直寫的 main 方法就是靜態方法。靜態方法的使用如 執行結果 需要注意 1 靜態方法中可以直接呼叫同類中的靜態成員,但不能直接呼叫非靜態成員。如 如果希望在靜態方法中呼叫非靜態變數,可以通過建立類的物件,然...