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
将会发生什么。哪个对象将保存静态变量的引用?以及更新静态变量时会发生什么?
答案 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