Java静态元素被不同的类访问
Posted
技术标签:
【中文标题】Java静态元素被不同的类访问【英文标题】:Java Static Elements Getting accessed by different class 【发布时间】:2012-12-22 09:16:44 【问题描述】:在 Java 中,静态元素通过仅指定类名后跟 dot
运算符来访问。
假设,我有一个名为 ClassA 的类,其静态基本类型为int a = 10;
如果我有其他两个类 ClassB 和 ClassC 同时访问元素 a
并进行一些更改,ClassB 所做的更改会不会? 也会影响 ClassC 吗?
【问题讨论】:
【参考方案1】:如果我有另外两个类
ClassB
和ClassC
同时访问元素a并进行一些更改,ClassB
所做的更改是否也会影响ClassC
?
只有一个ClassA.a
,因为它是静态成员。 ClassB
所做的更改会影响 ClassA.a
。 ClassC
将看到更改,因为它正在查看同一成员。
你描述的场景用代码和图表更好地表达:
课程:
class ClassA
static int a = 10;
class ClassB
static void look()
System.out.println("B sees " + ClassA.a);
static void change()
ClassA.a = 42;
class ClassC
static void look()
System.out.println("C sees " + ClassA.a);
static void change()
ClassA.a = 67;
使用它们:
ClassB.look(); // "B sees 10"
ClassC.look(); // "C sees 10"
ClassB.change();
ClassB.look(); // "B sees 42"
ClassC.look(); // "C sees 42"
ClassC.change();
ClassB.look(); // "B sees 67"
ClassC.look(); // "C sees 67"
图表:
+----------+ |甲级 | +----------+ +-+--->|静态a | | | +----------+ +-----------+ | | | B类 | | | +-----------+ | | | (方法)|-使用-+ | +-----------+ | | +-----------+ | | C类 | | +-----------+ | | (方法)|-使用---+ +-----------+
【讨论】:
【参考方案2】:静态字段与类相关,与实例无关。对静态字段的修改将导致对该字段的所有引用返回最后分配的值。从某种意义上说,A
现在在您的应用程序中被定义为一个全局变量,在大多数用例中这并不是一件好事。
public class App
public static void main(String[] args)
B b = new B();
C c = new C();
System.out.println(A.a); //outputs 10
b.changeA();
System.out.println(A.a); //outputs 30
c.changeA();
System.out.println(A.a); //outputs 20
class A
static int a = 10;
class B
public void changeA()
A.a = 30;
class C
public void changeA()
A.a = 20;
【讨论】:
感谢您的回复凯文。在您提供的示例中,“App”类确实在同一个程序中创建了 ClassB 和 ClassC 的实例,但是如果 ClassB 在一个类名中,它是“App1”,而 ClassC 在另一个类“App2”中,并且这两个类正在运行分开但同时。 ClassA 静态元素会发生什么?以上是关于Java静态元素被不同的类访问的主要内容,如果未能解决你的问题,请参考以下文章