怎么在word里做网站,十大电商代运营公司,买证书网站开发工程师,各省施工备案网站java中的静态变量和实例变量的区别
在Java中#xff0c;静态变量#xff08;也称为类变量#xff09;和实例变量是两种不同类型的变量#xff0c;它们在多个方面存在显著的区别。以下是它们之间的一些主要区别#xff1a;
存储位置 静态变量#xff1a;存储在方法区静态变量也称为类变量和实例变量是两种不同类型的变量它们在多个方面存在显著的区别。以下是它们之间的一些主要区别
存储位置 静态变量存储在方法区在Java 8及之后版本方法区被称为元空间的静态区域中被类的所有实例共享。即无论创建多少个类的实例静态变量只有一份拷贝。实例变量存储在堆内存中每个类的实例都有自己的一份拷贝。即每当你创建一个类的实例时都会为实例变量分配内存。
访问方式
静态变量可以通过类名直接访问无需创建类的实例也可以通过实例名访问。访问静态变量的一般语法是 类名.静态变量名 或 实例名.静态变量名。实例变量只能通过类的实例来访问。访问实例变量的一般语法是 实例名.实例变量名。
生命周期 静态变量静态变量的生命周期贯穿整个应用程序。只要类被加载到JVM中静态变量就存在直到类被卸载。实例变量实例变量的生命周期与对应的实例相同。实例变量在对象被创建时创建在对象被销毁时销毁。
用途 静态变量通常用于描述类的属性即所有对象共有的属性。例如在表示学生类的场景中学校的名称可能是一个静态变量因为所有学生都属于同一所学校。实例变量用于描述对象的特定属性即每个对象可能拥有不同的属性值。例如学生的姓名、年龄和分数都是实例变量因为每个学生的这些属性都是不同的。
初始化
静态变量可以在声明时初始化或者在静态代码块中初始化。静态变量在类被加载到JVM时初始化且只初始化一次。实例变量可以在声明时初始化也可以在构造方法中初始化或者在实例初始化块中初始化。每次创建类的实例时实例变量都会被初始化。
内存分配
静态变量和实例变量在内存中的分配区域不同如上所述静态变量存储在方法区的静态区域而实例变量存储在堆内存中。
代码演示说明 以上从概念上说明了两者之前的区别下面举一个简单的例子例证下有个更直观的感受。
class VariantTest{public static int staticVar 0;public int instanceVar 0;public VariantTest(){staticVar;instanceVar;System.out.println(staticVar staticVar ,instanceVar instanceVar);}
}Test
public void test3(){VariantTest variantTest new VariantTest();VariantTest variantTest2 new VariantTest();VariantTest variantTest3 new VariantTest();
}
如上是一个类中有一个静态变量staticVar和一个实例变量instanceVar构造方法中分别对这两个变量1我们先看结果
staticVar1,instanceVar1
staticVar2,instanceVar1
staticVar3,instanceVar1
从结果可以一目了然的看出静态变量其实每次创建新的对象都没变始终是同一个进行加1操作所以结果一直累加而实例变量则是每次创建新的对象时重新创建所以每次都是1。由此可以看出静态变量在类被加载到JVM时初始化且只初始化一次。实例变量每次创建类的实例时实例变量都会被初始化。