同一类中的Java静态和非静态变量

Wt *_*ker -1 java variables static non-static

我需要一些帮助来澄清静态和非静态变量。我的理解是静态变量在类的所有实例中具有相同的值。但是,假设我在同一个类中混合了静态和非静态变量。当我引用一个静态变量时,无论使用哪个实例,我都会得到相同的值?然而,当我引用一个非静态变量时,我将获得与该特定类关联的值?这似乎是一个内存管理噩梦。这真的是它的工作原理以及静态内存是如何处理的吗?是否在每个实例中创建了变量的多个副本,然后以某种方式同步,或者是在每个实例中创建的地址引用?在同一个类中混合使用静态和非静态变量是否有任何陷阱?TIA。

pfr*_*nza 5

你的断言是正确的......有点。静态在类的实例之间并没有真正共享,因为您不需要类实例来引用一个。

public class Foo {
   public static String MYSTRING = "test";
}
Run Code Online (Sandbox Code Playgroud)

可以在没有 Foo 实例的情况下访问

String localString = Foo.MYSTRING;
Run Code Online (Sandbox Code Playgroud)

我真的不太担心 JVM 如何选择存储静态变量的内存引用,这是委托给 JVM 设计者的实现细节。

拥有一个定义静态和非静态(实例)变量的类没有任何陷阱,它一直发生并且是完全自然的......只要你了解静态是如何工作的,这似乎是你所做的.