關於Java之static方法詳解

來源:互聯網
上載者:User

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屬性屬於類,所以他倆是被存到相應的類的記憶體空間裡。
  為什麼類還有自己的記憶體空間?是因為特定的類是特定的元類的對象。也就是說,類是某個其它類的對象。而這個元類並未開放給應用程式員。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.