Java中的变量分为静态变量和实例变量。其中静态变量也称为类变量,是在类级别声明的变量,它们与类有关联,而不是与类的实例有关联。而实例变量是在对象级别声明的变量,每个对象都有自己的实例变量。
public class MyClass {// 静态变量public static int staticVar = 0;// 实例变量public int instanceVar = 0;}
静态变量可以通过类名直接访问,不需要实例化对象,而实例变量则需要通过对象来访问。
MyClass.staticVar = 1; // 直接通过类名访问静态变量MyClass obj1 = new MyClass();obj1.instanceVar = 2; // 需要实例化对象来访问实例变量MyClass obj2 = new MyClass();obj2.instanceVar = 3;
静态变量只有一份,不管有多少实例对象,它们都共享同一份静态变量。所以,如果一个实例对象修改了静态变量的值,那么其他实例对象访问静态变量的值也会被修改。
MyClass obj1 = new MyClass();MyClass obj2 = new MyClass();obj1.staticVar = 1; // obj1修改静态变量的值System.out.println(obj2.staticVar); // 输出1,因为obj2访问的是修改后的静态变量值
实例变量是每个对象都独立拥有的,它们的值互不干扰。
MyClass obj1 = new MyClass();MyClass obj2 = new MyClass();obj1.instanceVar = 1; // obj1修改实例变量的值System.out.println(obj2.instanceVar); // 输出0,因为obj2自己拥有一份实例变量值
在使用静态变量时要注意,它们的生命周期和类的生命周期相同,一旦在程序运行期间加载了类,静态变量就会被初始化,并且一直存在于内存中,直到程序结束。因此,如果静态变量被大量使用,就会占用大量内存,从而影响程序的性能。
实例变量则只有在实例化对象时才会被初始化,并且只要对象被回收,实例变量就会被清除。