语法定义上区别:被static修饰的变量称为静态变量或者类变量。没有被static修饰的对象称为实例变量
程序运行上区别:只有创建实例对象后,其中的实例变量才会被分配空间,才能使用这个实例变量。但是静态变量不属于不属于某个实例对象,而是属于类,所以也称类变量。只要程序加载了类的字节码,不用创建任何的实例对象,静态变量就会被分配空间,就可以被使用了。总的来说,实例变量必须创建对象后才可以通过这个对象来使用,而静态变量则可以直接通过使用类名来使用!
举个例子:
public class Test{
public static int gg = 0;
public int kk = 0;
public Test()
{
gg++;
kk++;
System.out.println("gg="+gg+",kk="+kk);
}
}
上面的例子中:无论创建多少个实例对象,永远只分配一个gg变量,并且每创建一个实例对象,这个gg就会加1(注意只是它的值加1哦);但是每创建一个实例对象,就会分配一个kk,即可能分配多个kk,并且每个kk的值都自加一次。