1. 程式人生 > >(二十八)static關鍵字

(二十八)static關鍵字

需要 存儲 位置 直接 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關鍵字