静态不好吗?如何删除静态变量?

时间:2013-04-11 23:14:38

标签: java variables static global-variables

我正在处理一些代码。它基本上是用户输入并创建有向图。一个人可以单程旅行,另一个人则相反。输出是他们可以访问的地方的重叠。

我的大部分工作都按照我想要的方式工作,但我关注的是静态的使用。我似乎并不完全理解它,无论我在哪里,我都无法找到它的确切用途或如何摆脱它。

有人可以帮助我了解静电是什么以及为什么会有用?

另外,将大部分代码从MAIN移到辅助方法会更好吗?如果我这样做,我必须将所有变量从main移到顶层,然后它们都必须声明为静态?!

4 个答案:

答案 0 :(得分:3)

一切都必须是静态的原因是因为您没有创建任何对象。如果要通过在main方法中调用new来创建对象,则可以在该对象上使用非静态变量。这不是一个非常好的地方,可以为您提供有关为什么要使用面向对象设计的教程;你可以找到其中一个在线阅读(上面的评论者提供了一个可能的参考)。但是一切都必须是静态的原因是因为它只是从main方法运行,在java中它始终是静态的。如果你要在某处调用new,可以使用非静态变量。

答案 1 :(得分:1)

Static使一个方法或变量可供类的所有实例访问。它就像一个常数,但对于类来说。为了使它更容易理解,一些代码将完成工作:

public class Example {
  public static int numero;
}

public class Implementation {

  public static void main (String args[]) {
    Example ex1 = new Example();
    Example ex2 = new Example();
    Example.numero=10;
    System.out.println("Value for instance 1 is: " + ex1.numero);
    System.out.println("Value for instance 2 is: " + ex2.numero);
  }
}

运行以下代码将输出:

例如1的值是:10 例2的值是:10

因为您将静态变量numero(意大利语中的数字)设置为10。

知道了吗?

答案 2 :(得分:1)

看起来很多静态方法(findNodeInList等)都将ArrayList(代表一个map)作为它们的第一个参数。因此,您可以使用类Map来存储节点列表并在其上设置方法,而不是将其静态化。然后main方法将读取输入,但不必直接管理任何节点。 e.g:

class Map {
  ArrayList<Node> nodes;
  public void addNode(Node n) { nodes.add(n); }
  public int findNodeInList(String s) { ... }
  ...
  public static void main(String[] args) {
    Map peggyMap = new Map();
    Map samMap = new Map();
    // Read the data
    samMap.add(new Node(...));
  }
}

这样可以很好地处理所有与封装好的节点/映射有关的事情,而不是与读取数据的东西混合在一起。

答案 3 :(得分:0)

如果要在程序中使用类/方法,并且每次需要使用该方法时都不创建实例,那么静态非常有用。

前者

public class StaticExample {

  public static void reusable() {
  //code here
  }
}

这意味着您可以像这样使用它

StaticExample.reusable();

并且您不必创建像这样的实例

StaticExample staticExample = new StaticExample();

staticExample.reuseable();

我希望这可以帮助您决定是否使用静态。