1. 程式人生 > >關於對static修飾的成員變數理解

關於對static修飾的成員變數理解

第一步: 建立示例 

package com.xz.test;

public class Xstatic {
    public static int a;
    private  int b;
    public int getB() {
        return b;
    }
    public void setB(int b) {
        this.b = b;
    }
}
 

第二步:建立執行緒模仿,不同使用者訪問(到底算不算還請指教 我認為可以模仿) 

package com.xz.test;

public class TestStaticThread {
    public static void main(String[] args) throws InterruptedException {
        Test2 t1 = new Test2();
        Test2 t2 = new Test2();
        t1.setName("執行緒1————");
        t2.setName("執行緒2————");

        t1.start();
        Thread.sleep(3000);//此處為了防止執行緒搶佔資源導致列印順序混亂
        t2.start();
    }
}
 

第三步:執行

package com.xz.test;


public class Test2 extends Thread{
    @Override
    public void run() {
        // TODO Auto-generated method stub
        Xstatic x = new Xstatic();
        System.out.println("執行緒:"+Thread.currentThread().getName());

        System.out.println(Xstatic.a);
        System.out.println(x.getB());
        ccc(x);
//        System.out.println("-------");
//        vvv(x);
    }
    public static void ccc(Xstatic x1){
        
        
        Xstatic.a = 10;
        
        x1.setB(20);
//        System.out.println("static a :"+Xstatic.a);
//        System.out.println(" b :"+x1.getB());
    }
    public static void vvv(Xstatic x1){        
        System.out.println("static a :"+Xstatic.a);
        System.out.println("b :"+x1.getB());
    }
}
 

 

執行以上程式碼 列印結果為 

執行緒:執行緒1————
static修飾的變數:0
無static修飾的變數:0
執行緒:執行緒2————
static修飾的變數:10
無static修飾的變數:0

static 修飾的變數其實可以理解為類變數,當類被初始化時就也被初始化,並且不會被銷燬,所以具有一定的資料持久化的作用,直到伺服器重新啟動。同時也可以看出,不同執行緒訪問 static修飾的值會被記錄,無static修飾的無法被記錄。

比較片面的理解但是個人感覺便於接受、如有不恰當的還請指出、我好及時改正