在 Java 中,静态元素是通过仅指定类名后跟dot
运算符来访问的。
假设,我有一个名为ClassA的类,它具有静态原始类型int a = 10;
如果我有其他两个类ClassB和ClassC 同时访问元素a
并进行一些更改,ClassB所做的更改是否也会影响ClassC?
在 Java 中,静态元素是通过仅指定类名后跟dot
运算符来访问的。
假设,我有一个名为ClassA的类,它具有静态原始类型int a = 10;
如果我有其他两个类ClassB和ClassC 同时访问元素a
并进行一些更改,ClassB所做的更改是否也会影响ClassC?
静态字段与类相关,与实例无关。对静态字段的修改将导致对该字段的所有引用返回最后分配的值。从某种意义上说,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;
}
}
如果我有其他两个类
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类 | | +-----------+ | | (方法)|-使用---+ +-----------+