用static修饰的变量叫静态变量。静态变量不需要new出对象引用来调用,它可以直接用类名直接调用。当然用对象引用也能调它,只是不需要。非静态变量则必须用对象引用进行调用。静态变量在内存空间中只有一份,也永远只有一份。大家共享。非静态变量只要new出一个对象引用就会在内存中分配一份空间给它。并且他两的存放地点不一样,静态变量存放在栈空间。非静态变量存放在堆空间里。
同一个类的不同实例对静态变量的修改都是修改的同一个变量(就是这个静态变量), 这个变量的改变都会反映该所有的实例,所以静态变量可以用作同一类的不同实例间共享资源,这样很危险,如下面的小程序(在构造函数中出事话实例变量,这样该类每实例化一次,这个静态变量就会被初始化一次)
public class staticTest {
public static int count;
public static String ss;
public staticTest(){
count=0;
ss=new String("this is static value");
}
public static void main(String[] args){
staticTest t1=new staticTest();
t1.count=2;
t1.ss=t1.ss.concat("t1 changed ss");
System.out.println(t1.count+" "+t1.ss);
staticTest t2=new staticTest();
System.out.println(t2.count+" "+t2.ss);
System.out.println("++++++++++++++++++++++++++++++++");
System.out.println(t1.count+" "+t1.ss);
System.out.println(t2.count+" "+t2.ss);
}
}