前兩天面試時被問到靜態的特色,當時回答地不是很好,如今來總結一下java
在瞭解某樣東西的時候咱們一般會從它是什麼,爲何,和怎麼樣在三方面來衡量,對於java中的static,咱們也這樣討論下,要明確如下幾點:面試
一、 static在java中到底表明什麼,爲什麼要用它?數組
二、 static在java中怎麼用?函數
三、 static 有那些特色和使用的「侷限」?this
四、當成員變量被靜態修飾後,和非靜態成員變量的區別?spa
一、 static在java中到底表明什麼,爲什麼要用它?對象
static――靜態――「指定位置「
首先,咱們來看看java的內存:java把內存分爲棧內存和堆內存,棧內存用來存放一些基本類型的變量和數組及對象的引用變量,而堆內存主要是來放置對象的。
用 static的修飾的變量和方法,其實是指定了這些變量和方法在內存中的「固定位置」-static storage。既然要有「固定位置」那麼他們的 「大小」彷佛就是固定的了,有了固定位置和固定大小的特徵了,在棧中或堆中開闢空間那就是很是的方便了。若是靜態的變量或方法在不出其做用域的狀況下,其引用句柄是不會發生改變的。
咱們常看到:static變量有點相似於C中的全局變量的概念;靜態表示的是內存的共享,就是它的每個 實例都指向同一個內存地址。把static拿來,就是告訴JVM它是靜態的,它的引用(含間接引用)都是指向同一個位置,在那個地方,你把它改了,它就不會變成原樣,你把它清理了,它就不會回來了。生命週期
注:java的主類中main()方法自己就是一個static的,因此main方法的執行就是在沒有產生新的實例的狀況。內存
二、 static在java中怎麼用?作用域