本文主要介紹了Java中static的特點。具有很好的參考價值。下面跟著小編一起來看下吧
前兩天面試時被問到靜態的特點,當時回答地不是很好,現在來總結一下
在了解某樣東西的時候我們通常會從它是什麼,為什麼,和怎麼樣在三方面來衡量,對於java中的static,我們也這樣討論下,要明確以下幾點:
1、 static在java到底代表什麼,為何要用它?
2、 static在java怎麼用?
3、 static 有那些特色和使用的「限制」?
4、當成員變數被靜態修飾後,和非靜態成員變數的差別?
1、 static在java到底代表什麼,為何要用它?
static――靜態――「指定位置「
首先,我們來看看java的記憶體:java把記憶體分成堆疊記憶體和堆疊記憶體,堆疊記憶體用來存放一些基本型別的變數和陣列及物件的引用變量,而堆記憶體主要是來放置物件的。
用 static的修飾的變數和方法,實際上是指定了這些變數和方法在記憶體中的「固定位置」-static storage。既然要有「固定位置」那麼他們的 「大小」似乎就是固定的了,有了固定位置和固定大小的特徵了,在棧中或堆中開闢空間那就是非常的方便了。如果靜態的變數或方法在不出其作用域的情況下,其引用句柄是不會改變的。
我們常看到:static變數有點類似C中的全域變數的概念;靜態表示的是記憶體的共享,就是它的每一個 實例都指向同一個記憶體位址。把static拿來,就是告訴JVM它是靜態的,它的引用(含間接引用)都是指向同一個位置,在那個地方,你把它改了,它就不會變成原樣,你把它清理了,它就不會回來了。
註:java的主類別中main()方法本身就是一個static的,所以main方法的執行就是在沒有產生新的實例的情況。
2、 static在java怎麼用?
static是修飾符,用來修飾成員(成員變數和成員函數)。
當成員被靜態修飾後,就多了一個呼叫方式,除了可以被物件呼叫外,還可以直接被類別名稱呼叫:類別名稱.靜態成員。
3、 static 有那些特點和使用的「限制」?
(一)特徵
#靜態成員隨著類別的載入而載入;
靜態成員優先於物件存在;
靜態成員被所有物件所共用;
靜態成員多了一個中呼叫方式,可以被類別名稱直接呼叫。
(二)利弊
利:
可以直接被類別名調用。
(三)super
關鍵字;(因為this代表是對象,而靜態存在時,有可能沒有對象,且靜態優先於對象存在。 ,可是後進記憶體資料可以存取先進記憶體的資料)主函數是靜態的
#########4、當成員變數被靜態修飾後,和非靜態成員變數的差異? ######靜態變數也稱為類別變量,也就是直接可以被類別名稱呼叫的變,這個變數是所屬於類別的;非靜態變數稱為成員變量,或是實例變量,是被對象所調用的,是所屬具體對象的。
靜態變數隨著類別的載入而加載,也意味著隨著類別的消失而消失,生命週期最長;實例變量,隨著物件的創建而加載,隨著物件的消失而消失,依照物件的生命週期而存在。
靜態變數儲存在方法區的靜態區中;實例變數存在於物件所屬的堆記憶體中。
靜態變數數據,被所有物件所共享;實例變數是物件中的特有資料。
以上是詳細介紹Java中static的特點的詳細內容。更多資訊請關注PHP中文網其他相關文章!