Java - 全局变量与全局方法

时间:2012-12-22 16:53:33

标签: java resources global-variables global-methods

我正在研究一个5000多个班级的项目,然后我在每个班级都看到了这个:

private static int foo = 1;

private static void setfoo(int value)
{
     foo = value;
}

private static int getfoo()
{
     return foo;
}

所以,我认为为什么不使用全局变量并设置它,如果它是静态的。

全局方法和变量之间存在资源使用差异吗?

谢谢你。

3 个答案:

答案 0 :(得分:2)

如果您希望将来添加验证(或添加日志记录,或进行访问统计或...),则Getter和Setter非常有用。

答案 1 :(得分:0)

如果getter / setter存在,请始终使用它们。 getFoosetFoo有效地定义名为“Foo”的属性,这是在概念上与您的变量foo不同。 foo只是保存该属性当前值的变量,可以视为属于该属性。

请记住,一个属性不必只是获取/设置其支持变量。它还可以在设置之前验证您传入的值。它可以同步对变量的访问。和/或将来,setter可能会改变其他东西的特性,并且getter可以返回其他东西的当前状态,甚至不需要支持变量。通过直接设置变量,可以在将来更改属性的情况下创建兼容性问题。

但是,如果您知道setFoo确实(并且,在不久的将来,仍会这样做)除了设置名为foo的变量之外什么都没有,那么它实际上是更好地拥有一个getter / setter。它们不是更清洁,更可读,而且它们当然不会更有效率;所有方面都a = 3; doStuffWith(a);击败setA(3); doStuffWith(getA());。他们的缺席使你无法获得属性的概念包袱,你只需要一个变量。只在需要时添加getter / setter(或肯定需要很快)属性可以提供的特殊行为。 但是一旦你添加了它们,就到处使用它们。

答案 2 :(得分:0)

字段和getter以及setter都是私有的和静态的。这意味着它们的预期目的仅在类中使用。因此,如果您在所有类可访问的位置(全局可访问)创建它,那么另外一个公共类也必须跟踪该字段,因为在使用之前必须将它初始化为某个值(在大多数情况下, 1我觉得)。此外,你必须使这个代码互相排斥,以保持它一直正确(如果调用5000次真的会让它变慢)..接听你的电话......一切都由你决定..