如何在JAVA中使用静态全局变量

时间:2010-11-27 22:16:32

标签: java inheritance static

我正在开发一个Java程序,我有两个不同的类需要彼此共享变量。所以为此我创建了第三个类,它包含这些共享变量。基本上,第一类在第三类中有自己的标志,第二类在第三类中有自己的标志。当然,我将“extend ThirdClass”添加到其他类的定义中。

我的问题是当我在第一个类'main方法中更改第一个类'标志的值时,第二个类无法看到此更改。也就是说,它会看到具有初始值的旗帜。

我认为这是关于静态变量的。但我不知道解决方案。

实际上,我有两个服务器和多个客户端。我正在尝试为我的分布式系统课程模拟这些服务器的不同情况。每个服务器都有自己的数据表,与其他服务器同步。通过模拟,我的意思是服务器可能是关闭或向上,当客户端尝试到达服务器时,我需要将其指向其他服务器。因此,在客户端和服务器之间,我需要发送信息。

如何在两个类之间共享变量,并且可以在不丢失先前修改的情况下轻松地修改这些变量?

谢谢。

2 个答案:

答案 0 :(得分:4)

编辑 - 此答案适用于该问题的先前版本,其中不包含有关客户端和多个服务器的任何内容。这个答案是关于在类的实例之间共享数据。

有很多方法可以做这样的事情。如果我理解你在第一段中概述的方法,你不希望class1和class2扩展class3。您希望它们都引用 class3的相同实例。如果它们共享对同一对象的引用,则更改该对象的值将反映在两个类中。如果他们像你说的那样扩展了class3,那么class1和class2都将具有class3的属性,但是他们不会共享任何数据。如果3级有财产

  Object value;

然后class1和class2的实例会对'value'的单独实例分别引用。

您需要承担类和对象实例之间的关系,以及扩展类的含义。

请注意,这并不是在真实程序中的对象之间共享信息的好方法。您可能会遇到各种并发问题。对于使用使用静态字段实现的全局机制的解决方案也是如此。

要使用静态字段执行此操作,请执行以下操作:

class SharedData {
    public static Object shared1;
}

然后在您的class1和class2实例中,您可以访问

SharedData.shared1

用于set或get。

但我不会在任何专业背景下做这样的事情。

答案 1 :(得分:0)

如果有意义,你可以使用静态解决这个问题。当一个成员被声明为一个类的静态时,访问该成员的每个人都引用该变量的同一个实例,但这听起来并不像你想要的那样。

如果您希望某些数据由两个类共享,您可以将数据放在第三个类中,当您创建该第三个类的实例时,请确保其他两个类只能访问它。

你能概述一下你想要完成的事情吗?