(二十八)static關鍵字
阿新 • • 發佈:2018-07-27
需要 存儲 位置 直接 sta 程序 全局 靜態成員變量 回收機制 /*
* static 靜態的
* static修飾的成員變量的特點
* 1.static修飾的成員變量是該類的所有對象共享
* 2.static修飾的成員變量是隨著類的加載就在靜態區中開辟內存了,所以有限與非靜態成員開辟內存
* 3.static修飾的成員變量可以通過類名直接訪問
* 靜態成員變量和非靜態成員變量的區別?
* 1.存儲的數據
* 靜態成員變量存儲的是所有對象共享的數據
* 非靜態成員變量存儲的是每個對象特有的數據
* 存儲的位置
* 靜態成員便令是隨著類的加載在方法區中的靜態區開辟內存
* 非靜態成員變量是隨著對象的創建,在堆中開辟內存
* 調用方式
* 靜態成員變量可以通過類名訪問,也可以通過對象訪問
* 非靜態成員變量可以通過對象訪問
* 生命周期
* 靜態成員變量隨著類的加載就在方法區中的靜態區出現,整個程序執行玩消失。
* 非靜態成員變量隨著對象的創建在堆中出現,隨著對象被垃圾回收機制回收,而消失。
*/
總結:擁有static的靜態成員會在程序的執行的時候優先開始執行,且會在程序執行結束後消失,擁有全局都可以訪問到的特性。可以直接通過類名調用,也可以通過對象調用。靜態資源中無法訪問非靜態資源,因為在程序的加載順序中,靜態資源優於非靜態資源加載,在靜態資源中引用非靜態資源時,非靜態資源不存在,或報錯,靜態資源無法從上下文中引入非靜態 變量 name,但是可以引用靜態成員的變量。
什麽時候把成員變量修飾為static?
當成員變量需要被類的所有對象訪問時
什麽時候把成員函數修飾為static?
當成員函數中沒有用到所屬類中的任何的非靜態成員時
class Student { String name;//實例成員變量 static String country = "CN";//類變量 public void show() {//實例成員函數 System.out.println(name + " " + country); } } class Demo9 { public static void main(String[] args) { Student stu = new Student(); stu.name = "Jack"; stu.show(); Student stu2 = new Student(); stu2.name = "Tom"; stu2.show(); System.out.println(Student.country); } }
(二十八)static關鍵字