公共静态变量和私有静态变量之间的区别
Posted
技术标签:
【中文标题】公共静态变量和私有静态变量之间的区别【英文标题】:Difference between public static and private static variables 【发布时间】:2012-05-14 15:03:12 【问题描述】:class Employee
// salary variable is a private static variable
private static double salary;
// DEPARTMENT is a constant
public static final String DEPARTMENT = "Development";
public static void main(String args[])
salary = 1000;
System.out.println(DEPARTMENT+ " average salary:"+salary);
这个java程序包含一个静态变量。但是我无法理解。
【问题讨论】:
【参考方案1】:public
变量可以从任何地方访问(嗯,任何可以访问类的地方)。
private
变量只能在类内部访问。
static
变量属于类而不是类的实例。
注意变量DEPARTMENT
也是final
,也就是说一旦设置就不能修改了。这在这里很重要,因为这可以避免成为糟糕的代码——变量是一个常量,所以可以让类之外的东西访问它。
【讨论】:
太棒了。我对决赛感到困惑。【参考方案2】:在代码中任何地方都可以访问公共变量 - 私有变量只能在类本身内访问。在这种情况下,您在 Employee
类中使用 Employee.salary
,这很好。
请注意,静态变量是完全独立的问题 - 方法和类与变量一样具有可访问性。
还有其他可用的访问级别 - protected
和默认的“包”访问(无法明确指定)。见section 6.6 of the Java Language Specification for more details。
(顺便说一句,还值得了解static
的含义 - 您几乎可以肯定不希望这些变量是静态的,因为它们适用于每个 em> Employee
而不是一般的 Employee
概念。DEPARTMENT
在这里也是一个常数很奇怪。)
【讨论】:
我认为我们不需要私有静态变量 @Sameer:我完全不同意。虽然我一般不喜欢静态变量,但我当然不会声称它们从不需要。您使用常量的唯一静态变量是什么? (有时,即使常量也可以更好地作为私有......) @JonSkeet 如果我使用私有静态变量,那么即使类没有实例化,它会在应用程序(例如 android 应用程序)启动时获得内存吗?就像公共静态变量获取内存一样? @Dharmendra:是的,公共/私有在内存方面没有区别。 @AustinWBryan:仅仅因为一个词 can 被用作关键字并不意味着它应该总是在 Markdown 的代码字体中指定。在这种情况下,public 和 static 都更适合作为常规词阅读,IMO。【参考方案3】:private static double salary
仅在类中可用,并且可以作为访问
salary or Employee.salary
虽然
public static final String DEPARTMENT
也可以从此类外部访问,如下所示
Employee.DEPARTMENT
【讨论】:
【参考方案4】:public static
- 可以从类内和类外访问。
private static
- 只能从类中访问。
静态被认为是 OOPS 中的反 OO。
class Dog
public static string X;
private static string y;
y
只能通过Dog.y
或y
从Dog
内部访问。
X
可以通过Dog.X
在任何地方访问,或者,如果您在课堂上或使用using static Dog
作为标题,只需X
。
【讨论】:
【参考方案5】:很明显,你不能从类外访问private
静态变量,你可以从任何地方访问public
静态变量。
【讨论】:
再看一下。变量salary是私有的。但是如果是私有的,这行“public static void main(String args[])salary = 1000;”怎么办?访问工资? @Androidmaid:因为您是从同一个班级(员工)中访问它。 使用当今的计算机/技术,少量内存不会造成任何伤害以上是关于公共静态变量和私有静态变量之间的区别的主要内容,如果未能解决你的问题,请参考以下文章
用于存储简单数据的“公共静态”和“私有静态”之间的区别。啥是更好的? [复制]