1、语法定义上的区别:
静态变量:需要加static关键字
实例变量:不需要加static关键字修饰
2、程序运行时的区别:
静态变量:静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量可以直接用类名调用。
实例变量:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。
例如:
在StaticDemo类中定义一个static类型的成员变量:
public class StaticDemo { public static int a=1; }
创建测试类:
public class Test { public static void main(String[] args) { StaticDemo ad1 = new StaticDemo(); ad1.a = 100; System.out.println(ad1.a); StaticDemo ad2 = new StaticDemo(); System.out.println(ad2.a); } }
两次输出的值都为100,改变一个对象的值,另外一个对象的值也跟着改变。
静态变量是被static修饰符修饰的变量,也称为类变量,它属于类,不属于类的任何一个对象,一个类不管创建多少个对象,静态变量在内存中有且仅有一个拷贝;实例变量必须依存于某一实例,需要先创建对象然后通过对象才能访问到它。静态变量可以实现让多个对象共享内存。
3、静态不能访问非静态变量和方法(类的非静态成员不存在的时候,静态成员已经存在了)
4、static关键字的好处
(1)不用创建对象,也能使用类中的属性和方法;
(2)效率高;不用多次占用内存。