【问题标题】: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程序包含一个静态变量。但是我无法理解公共静态变量和私有静态变量之间的区别。

【问题讨论】:

    标签: java variables static private public


    【解决方案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:因为您是从同一个班级(员工)中访问它。
        • 使用当今的计算机/技术,少量内存不会造成任何伤害
        猜你喜欢
        • 1970-01-01
        • 2011-05-25
        • 2020-07-13
        • 2015-08-11
        • 2017-06-30
        • 2011-09-23
        • 1970-01-01
        • 2010-09-25
        相关资源
        最近更新 更多