close

今天在聯成電腦上了8個小時的課程,一直找老師請教,所以大概了解了static的用法,因此來記錄一下,新手難免有錯,如果有錯誤可以留言讓我知道!!

static有人稱它是靜態的意思,是因為有用static修飾過的屬性是存放在靜態區域(獨力記憶空間),並且在一開始就被載入記憶體,從程式碼開始就有這屬性,會直到結束後才消失,而這空間是大家共用的,因此如果數值有改變就不會有初始化的動作,什麼意思呢?如下圖:

 

no-static.jpg

當count屬性宣告不是static時,代表是非靜態,所以當有物件對這屬性資料有加減的動作時,這物件的狀態成員資料不會影響到另外一個物件成員資料,意思是說物件在建立後,要使用這資料會存在自己物件的記憶體,而不是共用的。

 

static.jpg

這張跟上圖明顯輸出的count結果不一樣,因為我們把count宣告為static,所以test物件和test2物件都共同存取同一個count的空間,也就說當test物件對count進行修改或是test1對count進行動作,都會直接影響count的值,而且是影響同一個count。

由上面可以歸類出一些重點:

  1. 1.一般class實體化後的物件,物件存在的屬性和方法我們稱為實體成員,這些屬性及方法必須伴隨著物件才具有存在意義,不然就沒屁用了,相反的,我們有用static修飾子修飾過的屬性和方法就不需要伴隨物件,而自己就有意義了,我們稱為這叫做類別成員
  2. 2.宣告為static的屬性也會被繼承,但是所有相關的類別和物件,還是共用同一屬性變數。
  3. 3.資料成員如果宣告時使用了static修飾,該成員變成屬於類別而就不是屬於物件所有,所以使用static不需要先建立物件,也是可以建立再去使用static可是就像是脫褲子放屁多此一舉。 
  4. 4.宣告為static的屬性就是靜態的存在類別記憶體空間,如果其他類別要使用,只要存取權限沒問題,只要使用類別.屬性名稱或是類別.方法名稱,其他類別就可以呼叫使用相當方便,不用再new一個物件出來那麼麻煩,但要使用時要相當小心,要做好完善的規劃。
  5. 5.實例方法(意思就是非static的方法)可以直接使用static變數,換句話說一般沒有加上static的方法可以自由在方法中使用static屬性或是static方法。
  6. 6.要相當小心一件事,就是初學者(就是我@@)常會犯的錯,只要是static方法當然是可以直接自由使用static屬性或是static方法,但是絕對不行直接呼叫使用非static變數及非static方法,如果執意要使用,有一個解決辦法就是在static方法中建立物件,然後利用物件的參考變數來控制實例方法實例變數,意思就是說在static 方法內new一個物件出來,再用Test t = new Tesr=t();的t參考變數去t.getCount()取得實例方法,或是t.count取得實例變數。
  7. 7.宣告為static的變數會有初始值,如果沒有設,編譯器會自動給予預設值,像是static int初始值為0和static boolean初始值為false。 
     

 

要用static修飾子真的要相當小心,有時候用的好會讓程式相當漂亮,又節省記憶體空間,希望在未來的3個月,能在學更多,如果有錯誤歡迎留言給我指教,不斷地從錯誤學習才會在下次記得不會犯同樣的錯,謝謝!!

arrow
arrow
    文章標籤
    java 程式語言 static
    全站熱搜

    KV 發表在 痞客邦 留言(2) 人氣()