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