公共静态变量和私有静态变量之间的区别

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.yyDog 内部访问。 X 可以通过Dog.X 在任何地方访问,或者,如果您在课堂上或使用using static Dog 作为标题,只需X

【讨论】:

【参考方案5】:

很明显,你不能从类外访问private静态变量,你可以从任何地方访问public静态变量。

【讨论】:

再看一下。变量salary是私有的。但是如果是私有的,这行“public static void main(String args[])salary = 1000;”怎么办?访问工资? @Androidmaid:因为您是从同一个班级(员工)中访问它。 使用当今的计算机/技术,少量内存不会造成任何伤害

以上是关于公共静态变量和私有静态变量之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

私有静态变量

用于存储简单数据的“公共静态”和“私有静态”之间的区别。啥是更好的? [复制]

清理单元测试之间的私有静态变量

java基础(static---静态方法和静态变量以及静态方法)

在块内,__block 变量和静态变量之间的实际区别是啥?

c++中关于私有静态变量的问题