我想在同一类对象的各个实例之间共享一个对象。
从概念上讲,当我的程序运行时,A 类的所有对象都访问 B 类的同一个对象。
我见过那个static
是系统范围的,并且不鼓励使用它。这是否意味着如果我有另一个程序在实例化 A 类对象的同一个 JVM 上运行,这些对象可能会访问与前一个程序中访问的对象相同的 B 对象?
使用静态字段通常有哪些缺陷?
是否有任何替代方案(不需要付出巨大的实施努力)?
静态并不完全意味着“由所有实例共享” - 它意味着“与特定实例根本不相关”。换句话说,您可以获取类 A 中的静态字段,而无需创建any实例。
至于在同一个 JVM 中运行两个程序 - 这实际上取决于“运行两个程序”的确切含义。静态场是有效地与类对象关联,类对象又与类加载器关联。因此,如果这两个程序使用单独的类加载器实例,您将拥有两个独立的静态变量。如果他们都使用相同的类加载器,那么就只有一个类加载器,这样他们就能看到彼此的更改。
至于替代方案 - 有多种选择。一种是将“共享”对象的引用传递给您创建的每个需要它的对象的构造函数。然后需要存储该引用以供以后使用。与静态方法相比,这可能有点麻烦,并且会占用更多内存,但它确实易于测试。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)