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

Posted

技术标签:

【中文标题】Java静态元素被不同的类访问【英文标题】:Java Static Elements Getting accessed by different class 【发布时间】:2012-12-22 09:16:44 【问题描述】:

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

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

如果我有其他两个类 ClassBClassC 同时访问元素 a 并进行一些更改,ClassB 所做的更改会不会? 也会影响 ClassC 吗?

【问题讨论】:

【参考方案1】:

如果我有另外两个类ClassBClassC同时访问元素a并进行一些更改,ClassB所做的更改是否也会影响ClassC

只有一个ClassA.a,因为它是静态成员。 ClassB 所做的更改会影响 ClassA.aClassC 将看到更改,因为它正在查看同一成员。

你描述的场景用代码和图表更好地表达:

课程:

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静态元素被不同的类访问的主要内容,如果未能解决你的问题,请参考以下文章

Java的静态成员类

C++ 静态方法(在不同的类中)(如 Java 的)

深入浅析Java中Static Class及静态内部类和非静态内部类的不同

java函数加不加static有何不同

Java:成员变量局部变量和静态变量

黑马程序员——————>非静态内部类