【问题标题】:questions on static variables in java关于java中静态变量的问题
【发布时间】:2011-08-03 23:10:06
【问题描述】:

我试图在我的程序中使用静态变量,并理解静态变量意味着每次都使用相同的变量实例。

但是,我一直在使用静态变量,因为我觉得它允许我在不“实例化”(新)类的情况下获得我需要的变量。或者特别是因为我需要另一个类中的变量,我不应该创建该类的新实例。

这是正确的做法吗?

我应该创建静态 GET 方法来获取类中声明的静态变量吗?

【问题讨论】:

  • 你能发布一些示例代码吗?通常最好避免使用静态变量,并且通常将其用于常量。您要解决什么具体问题?

标签: java class static


【解决方案1】:

...,我一直在使用静态变量,因为我觉得它允许 我在没有“实例化”(新)的情况下获得我需要的变量 类

声明一个静态变量意味着你绕过了new。它只是意味着变量引用了一个,并且只引用了它的类的一个实例。

例子:

class Universe { 

   //there is only one Earth, but it needs to be constructed.  In this example, when
   //the Universe class is loaded, the initialization below happens.
   static World EARTH = new World(...);

   public static Planet getTheEarth() { 
       return EARTH;
   }

}

或者特别是因为我需要另一个类中的变量并且我 不应创建该类的新实例。

好的,所以将对变量的引用传递给另一个类。

例子:

class Earth {    

    Moon moon;

    public Earth(Moon moon) {    
        this.moon = moon;
    }
}

【讨论】:

    【解决方案2】:

    如果您希望在类的所有实例之间共享 1 个值,则使用静态变量。例如。如果你有类似的东西

    public class Person {
    
    public static int instancesCount = 0;
    
    public Person() { 
    
    Person.instancesCount++;
    }
    }
    

    这意味着对于 Person 的每个实例,“全局”instanceCount 变量将加一。所以如果你这样做

    Person p1 = new Person();
    Person p2 = new Person();
    

    那么这两个实例 s(p1 和 p2) 都可以访问 Person.instanceCount 变量,并且它们都将显示数字 2。此外,如果您在任一实例中修改变量,则两者都将具有相同的可见性它。

    基本上,除非您知道自己在做什么,否则不要使用静态变量。

    【讨论】:

      【解决方案3】:

      首先,您不应该使用 GET 方法来获取类中声明的静态变量。例如,如果你想打印静态变量,你可以这样做:

      static int staticVariable = 0;    
      ClassObject c;
      System.out.println(c.staticVariable);
      

      基本上,类的任何对象都可以访问静态变量,您所要做的就是使用类的实例来访问它。我建议您远离静态变量,直到您对它们有更好的理解。

      【讨论】:

        【解决方案4】:

        “需要另一个类中的变量”是什么意思?为什么“你不应该创建一个新实例”?为什么变量首先“在”另一个类中?

        类不是代码和/或数据的存储容器。它们是新数据类型的定义。因此,整个“实例”的事情。

        【讨论】:

          【解决方案5】:

          如果您只是使用您的类来保存其他类可以访问的数据,那么您可能不想使用静态字段。如果您想确保只有一个此类的实例,使用单例模式可能会更好、更灵活。仅当您希望类的所有实例共享该字段时,通常才应使用静态字段。

          【讨论】:

            【解决方案6】:

            您确实需要了解一些基本的面向对象编程概念。从“Thinking in Java”或“Effective Java”之类的书开始。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2011-08-29
              • 1970-01-01
              • 2022-01-19
              • 1970-01-01
              • 2013-02-08
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多