关于java中静态变量的问题

时间:2011-08-03 23:10:07

标签: java class static

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

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

这是正确的方法吗?

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

6 个答案:

答案 0 :(得分:1)

  

...,我一直在使用静态变量,因为我觉得它允许   我得到我需要的变量而没有'实例化'(新)   类

声明变量static not 意味着您绕过了 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;
    }
}

答案 1 :(得分:0)

如果要在类的所有实例之间共享1个值,则使用静态变量。例如。如果你有像

这样的东西
public class Person {

public static int instancesCount = 0;

public Person() { 

Person.instancesCount++;
}
}

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

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

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

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

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

如果你刚刚使用你的类告诉其他类可以访问的保持数据,那么你可能不想使用静态字段。如果要确保只有一个此类的实例,则使用单例模式可能更好,更灵活。如果您希望类的所有实例共享该字段,则通常仅应使用静态字段。

答案 5 :(得分:-1)

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