关于对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修饰的无法被记录。

比较片面的理解但是个人感觉便于接受、如有不恰当的还请指出、我好及时改正  

猜你喜欢

转载自blog.csdn.net/L_Person/article/details/84318507