1. 程式人生 > >在Java中,關於Static關鍵字的案例分析

在Java中,關於Static關鍵字的案例分析

新建一個Value類

public class Value {
    static int c = 0;
//無參構造方法
Value() {
        c = 15;
}


    //有參構造方法
Value(int i) {

        c = i;
}


    //靜態方法
static void inc() {
        c++;
}

}
再建一個Count類
public class Count {

    static Value v1, v2;//靜態變數
static {//此即為staticprt("v1.c=" + v1.c + "  v2.c=" + v2
.c); v1 = new Value(27);//New了一個Value3的例項 prt("v1.c=" + v1.c + " v2.c=" + v2.c); v2 = new Value(15);////New了一個Value3的例項 prt("v1.c=" + v1.c + " v2.c=" + v2.c); } Value v = new Value(10);////New了一個Value3的例項 public static void prt(String s) {//定義了一個靜態方法 System.out.println(s); } public static void main
(String[] args) {//主方法 Count ct = new Count(); prt("ct.c=" + ct.v.c); prt("v1.c=" + v1.c + " v2.c=" + v2.c); v1.inc(); prt("v1.c=" + v1.c + " v2.c=" + v2.c); prt("ct.c=" + ct.v.c); } /* v1.c=0 v2.c=0 new出類例項的時候,會先載入static靜態程式碼塊。 v1.c=27 v2.c=27 v1.c=15 v2.c=15 ct.c=10
執行完靜態程式碼塊後,才會執行呼叫的靜態方法,所以ct.c=10,由於cValue3的靜態變數屬性,類載入的時候 也一起載入完畢,所有例項共享一個靜態變數,不會再建新的靜態變數。 v1.c=10 v2.c=10 再次呼叫prt方法,v1.cv2.c裡的c已經不再是2715,而是10 v1.c=11 v2.c=11 執行完v1.inc方法後,靜態變數值增加,不再新建,所以在10的基礎上新增1 ct.c=11*/ // 同理, 例項變數與靜態變數不同點在於,一個是類的全域性屬性,所有的類例項共享一個靜態變數, // 不會隨著例項的增加而增加,例項變數是屬於例項的屬性,每new一個例項就會增加一個相應的例項變數。 }