Java中static方法疑惑

2021-05-22 20:29:46 字數 1034 閱讀 3910

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 使用之靜態方法

與靜態變數一樣,我們也可以使用 static 修飾方法,稱為靜態方法或類方法。其實之前我們一直寫的 main 方法就是靜態方法。靜態方法的使用如 執行結果 需要注意 1 靜態方法中可以直接呼叫同類中的靜態成員,但不能直接呼叫非靜態成員。如 如果希望在靜態方法中呼叫非靜態變數,可以通過建立類的物件,然...

了解Java中的Static

class person string name double money 如果我們有10個人,每個人錢包,裡面有5元錢。person 張三 new person 張三花掉5元錢後,自己的錢包就沒有錢了,而其它9個人的錢都沒有發生變化,因為個人都有自己的錢包。class person string ...

JAVA中static的用法

1.類中的static變數在類載入時首先被初始化,且只能初始化一次.2.所有物件共享類中的static變數.3.在建立子類的物件時,先初始化父類的static變數,再初始化子類的static.例項如下 輸出結果為 i m in class a s static i m in class b s st...