我对 Java 中的局部变量和成员变量有疑问。情况是:有时如果我定义一个局部变量,该变量必须被传递到几个级别的方法调用中。我经常想,我为什么要为类定义一个成员变量,以便该变量在类中的任何地方都可用。类的成员变量就像在类中随处可访问的全局变量。
这种情况的最佳做法是什么?或者什么是正确的做法?
如果我将它定义为成员变量,它应该是静态变量还是非静态变量?
我对 Java 中的局部变量和成员变量有疑问。情况是:有时如果我定义一个局部变量,该变量必须被传递到几个级别的方法调用中。我经常想,我为什么要为类定义一个成员变量,以便该变量在类中的任何地方都可用。类的成员变量就像在类中随处可访问的全局变量。
这种情况的最佳做法是什么?或者什么是正确的做法?
如果我将它定义为成员变量,它应该是静态变量还是非静态变量?
成员变量具有特性——属性是另一个术语——代表程序中由类表示的“事物”。如果您的变量包含类似的内容,请将其设为成员变量;如果没有,不要。
静态变量具有类本身的特征,而不是该类的对象的特征。
不要根据您是否“将...传递给多个级别的方法调用来做出决定。
考虑到您的一般性问题,我根据自己的经验提出了以下准则:
对于您的第二个问题:我通常将静态变量定义为 final ,这使它们成为常量。多线程环境中的非最终静态成员可能很容易引入竞争条件。如果需要,更容易使访问非静态成员线程安全。
如果您决定声明一个成员变量,那么您应该考虑变量范围。如果您只是减少内部方法调用的参数数量,我会考虑将变量声明为private
.
您应该小心使用Static
,因为该类的每个实例都将使用该变量的相同副本。
这是行为上的。如果您的变量是类属性的一部分,即表征类行为,则将其定义为类成员变量,否则在方法内定义一个局部变量。
在我看来,传递参数对属性类型定义没有贡献。
这取决于。
如果您希望所有(或多个)方法访问同一个成员变量,请在类中声明它。
静态与否取决于信息是属于类(静态)还是属于类的实例(非静态)。
1.) 如果你打算在多个方法中使用它并且需要传递它,让它的成员变量。如果仅用于该方法,请将其设为本地。
2.)static
表示它们只是该变量的一个实例,该变量在所有事物中共享。因此,例如,我有一个totalGameScore
变量,无论如何都会保持我在整场比赛中的得分。你想使那个变量static
。除此之外,可以说我的health
敌人有一个变量。每个敌人都有自己的health
,所以我不会做那个变量static
。
您还可以声明成员变量private
,以便其他类无法访问它们。
Constants
通常应该总是成员变量。