如何控制 Java 中变量的可见性?
Posted
技术标签:
【中文标题】如何控制 Java 中变量的可见性?【英文标题】:How to control visibility of variables in Java? 【发布时间】:2011-01-24 17:59:54 【问题描述】:我可以想象变量的 3 种可见性(但我认为还有更多):
变量在方法中使用,并且该变量的值的任何变化在方法外部是不可见的(因此它对于特定方法是局部的)。
变量是类的本地变量,这意味着它在类外部是不可见的。但是,该类的任何方法都可以轻松查看和更改该变量的值,而无需在方法的参数列表中提供该变量(因此它在类中是全局的)。
可以通过“objectName.variableName”访问变量。
如何声明这些不同类型的变量?
【问题讨论】:
“(所以它在类中是一种全局)”:一个真正的“全局”类是一个static
变量。
应该注意的是,3通常被认为是一个坏主意。
【参考方案1】:
1) 在方法中声明的任何变量仅在该方法中可见。 (本地方法)。程序员对此别无选择。
2) 使用修饰符 private
声明的任何变量仅在它所在的类的实例中可见。
3) public
变量可以通过object.variable从任何类访问; protected
变量只能从子类以这种方式访问; private
变量只能在声明变量的类的实例中以这种方式访问。
有关详细信息和参考,请参阅Java Learning Trail on Sun's website。
但是:将类成员(变量)暴露给其他类是不好的做法,应使用以下方法启用访问,例如:
public class MyClass
private int myInt;
public int getMyInt()
return myInt;
public void setMyInt(int newInt)
myInt = newInt;
【讨论】:
别忘了一开始就省略修饰符会使它成为包私有的。这使它在类外可见,但仅在本地包内可见(这非常有用)。 java.sun.com/docs/books/tutorial/java/javaOO/accesscontrol.html 确实如此,但问题中的用例并未涵盖这一点:) 实际上 - 既然你提到了@Chris Dennett,我不得不承认我从来不需要使用包私有。我一直认为它引入了对包结构的不必要依赖,并且有用性非常有限。如果您有未涵盖的用例,您可能想在这一点上发布另一个 SO 问题 :) 当您想共享方法但又不想让外部代码看到它时,它真的很有用。否则你必须弄乱接口(没有内部方法),然后从接口转换为真正的类(如果人们决定在某些情况下自己实现接口,这可能会导致问题!)【参考方案2】:需要记住的重要一点:如果您在类中声明一个变量并且不使用任何访问修饰符,它将是包私有的。这意味着您可以从同一个包中的其他类中使用 objectname.variable 来引用它,而从其他包中的类中则不能。
【讨论】:
【参考方案3】:1:就像方法中的 int i;
一样
2:使用private
修饰符或protected
修饰符
3:使用public
【讨论】:
以上是关于如何控制 Java 中变量的可见性?的主要内容,如果未能解决你的问题,请参考以下文章