static關鍵字

    通常來講,創建類的時候,就是在描述一個類的外觀與行爲,並且需要創建這個類的實例對象,否則並沒有獲得任何對象,用new來創建對象時,數據的存儲空間纔會被分配,這個類的方法也纔可以被外界調用。。但是有特例嗎?
    有兩種情形,第一:在不考慮創建多少對象,甚至根本就不用new創建實例對象的情況下,爲某特定區域分配存儲空間;第二:在不創建這個類的對象的情況下,調用這個類中的方法。
    通過static關鍵字可以滿足這兩種情形。static修飾的變量是靜態變量,在系統內存中指定了特定的區域來存放這個變量,因此即便創建多個對象,多個對象也只指向同一個內存空間,多個對象的值是同步變化的(其實是對應同一個值)。

如下代碼示例:
測試static關鍵字,用static修飾一個變量的時候,
1.會在內存中爲某特定域指定單一存儲空間,不去考慮要創建多少對象;
2.希望某個方法不與包含他的那個類的任何對象關聯在一起,也就是說,即使沒有創建對象也能調用這個方法。

使用類名點變量是引用static變量的首選方式

ackage com.company;

/**
 * Created by wangyong1015 on 2016/11/8.
 */

/**
 * 如下的代碼,static修飾i,StaticTest.i只有一份存儲空間,所以輸出的值是一樣的,是同一個值
 */
//使用類名點變量是引用static變量的首選方式,

public class StaticTest {

    static int i = 47;

    public static void main(String[] args) {
        //兩個方法
        //1.通過對象去定位i
        StaticTest st1 = new StaticTest();
        StaticTest st2 = new StaticTest();

        System.out.println("st1:"+st1.i);
        System.out.println("st2:"+st2.i);

        //2.通過類名直接引用
        System.out.println( "類名直接調用"+StaticTest.i);

        StaticTest.i++;
        //輸出結果均爲48
        System.out.println("st1++:"+st1.i);
        System.out.println("st2++:"+st2.i);

        //由此可以看出,static修飾後,所有引用都指向同一個位置
        st1.i++;
        System.out.println(st1.i);//輸出49
        System.out.println(st2.i);//輸出49


    }

}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章