2

我对 Java 中的局部变量和成员变量有疑问。情况是:有时如果我定义一个局部变量,该变量必须被传递到几个级别的方法调用中。我经常想,我为什么要为类定义一个成员变量,以便该变量在类中的任何地方都可用。类的成员变量就像在类中随处可访问的全局变量。

  1. 这种情况的最佳做法是什么?或者什么是正确的做法?

  2. 如果我将它定义为成员变量,它应该是静态变量还是非静态变量?

4

6 回答 6

5

成员变量具有特性——属性是另一个术语——代表程序中由类表示的“事物”。如果您的变量包含类似的内容,请将其设为成员变量;如果没有,不要。

静态变量具有类本身的特征,而不是该类的对象的特征。

不要根据您是否“将...传递给多个级别的方法调用来做出决定。

于 2013-04-12T21:05:08.650 回答
2

考虑到您的一般性问题,我根据自己的经验提出了以下准则:

  • 使用最小的可能范围。如果局部变量很好,那么为什么要使用成员变量?
  • 根据领域对类进行建模。如果您有一个值并且它是类责任的一部分,那么将其建模为类成员似乎是合适的。

对于您的第二个问题:我通常将静态变量定义为 final ,这使它们成为常量。多线程环境中的非最终静态成员可能很容易引入竞争条件。如果需要,更容易使访问非静态成员线程安全。

于 2013-04-12T21:16:11.010 回答
0
  1. 如果您决定声明一个成员变量,那么您应该考虑变量范围。如果您只是减少内部方法调用的参数数量,我会考虑将变量声明为private.

  2. 您应该小心使用Static,因为该类的每个实例都将使用该变量的相同副本。

于 2013-04-12T21:04:26.173 回答
0

这是行为上的。如果您的变量是类属性的一部分,即表征类行为,则将其定义为类成员变量,否则在方法内定义一个局部变量。

在我看来,传递参数对属性类型定义没有贡献。

于 2013-04-12T21:04:39.190 回答
0

这取决于。

如果您希望所有(或多个)方法访问同一个成员变量,请在类中声明它。

静态与否取决于信息是属于类(静态)还是属于类的实例(非静态)。

于 2013-04-12T21:05:38.947 回答
0

1.) 如果你打算在多个方法中使用它并且需要传递它,让它的成员变量。如果仅用于该方法,请将其设为本地。

2.)static表示它们只是该变量的一个实例,该变量在所有事物中共享。因此,例如,我有一个totalGameScore变量,无论如何都会保持我在整场比赛中的得分。你想使那个变量static。除此之外,可以说我的health敌人有一个变量。每个敌人都有自己的health,所以我不会做那个变量static

您还可以声明成员变量private,以便其他类无法访问它们。 Constants通常应该总是成员变量。

于 2013-04-12T21:05:51.607 回答