JVM如何处理静态变量?

时间:2014-12-01 13:41:35

标签: java static

class A{
  static int a=5;
  int b=6;

  void method(){
    //method body
     a++;
  }
}

JVM如何处理静态变量处理静态变量。例如......

A object1=new A();
A object2=new A();

上面的代码将在两个不同的内存位置创建两个A类对象。此外,还将创建两个variable b实例。 variable a将会发生什么。哪个对象将保存静态变量的引用?以及更新静态变量时会发生什么?

4 个答案:

答案 0 :(得分:3)

  

"哪个对象将保存静态变量"

的引用

对象不保留静态变量,因为它们不绑定到任何对象,它们绑定到类。 应用于类(而非实例数据)的类和所有数据都存储在堆的“永久生成”部分中。

https://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html

答案 1 :(得分:1)

只有一个变量a的副本,它在类A的所有实例之间共享。

静态成员变量是类变量。它们不存在于类的任何实例(对象)中 - 因此没有A对象来保存变量。

请参阅Oracle的Java教程:Understanding Class Members

答案 2 :(得分:1)

静态变量与不在实例中的类相关,因此A的两个实例将共享静态变量。

另一个例子,如果你需要同步(使用synchronized)来访问静态变量,你必须记住锁是静态的,所以锁与所有实例共享。

答案 3 :(得分:0)

直接回答

&#34;存储在类的上下文中的所有静态数据(全局内存)和所有对象数据,如实例变量(特定于每个对象 - 自己的副本)存储在对象作用域内存&#34; < / p>

对静态变量的更改将反映所有对象bcz它是一个全局内存,而实例变量的更改是特定于对象级别的

object1 = new A(); a = 5 b = 6

object2 = new A(); a = 5 b = 6

object1.method(); a = 6 b = 6

object2.method(); a = 7 b = 6

相关问题