關於對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修飾的無法被記錄。
比較片面的理解但是個人感覺便於接受、如有不恰當的還請指出、我好及時改正