Java静态元素由不同的类访问

时间:2012-12-22 09:16:45

标签: java types static primitive-types modifiers

在Java中,通过仅指定类名称后跟dot运算符来访问静态元素。

假设我有一个名为 ClassA 的类,其静态基元类型为int a = 10;

如果我有其他两个类 ClassB ClassC 同时访问元素a并进行一些更改,那么 ClassB 也影响 ClassC

2 个答案:

答案 0 :(得分: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;
    }
}

答案 1 :(得分:2)

  

如果我有其他两个班级ClassBClassC同时访问元素a并进行一些更改,那么ClassB所做的更改是否会影响{{1} }

只有一个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;
    }
}

图:

                         +----------+
                         |  ClassA  |
                         +----------+
                  +-+--->| static a |
                  | |    +----------+
+-----------+     | |
|  ClassB   |     | |
+-----------+     | |
| (methods) |-use-+ |
+-----------+       |
                    |
+-----------+       |
|  ClassC   |       |
+-----------+       |
| (methods) |-use---+
+-----------+