1

我有一些我正在处理的代码。它基本上接受用户输入并创建有向图。一个人可以走一条路,另一个人则相反。输出是他们可以访问的重叠部分。

我几乎所有东西都按照我想要的方式工作,但我担心我所拥有的静态的使用。我似乎没有完全理解它,无论我在哪里看,我都无法找到它的确切用途或如何摆脱它。

有人可以帮我理解什么是静态以及为什么它会有所帮助吗?

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

4

4 回答 4

3

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

于 2013-04-11T23:21:55.973 回答
1

看起来您的许多静态方法(findNodeInList 等)都将 ArrayList(表示地图)作为它们的第一个参数。因此,您可以拥有一个 Map 类,而不是静态的,它存储节点列表并在它们上有方法。然后 main 方法将读取输入,但不必直接管理任何节点。例如:

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(...));
  }
}

这可以很好地封装与节点/映射有关的所有内容,而不是与与读取数据有关的内容混在一起。

于 2013-04-11T23:30:07.507 回答
1

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

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。

知道了?

于 2013-04-11T23:24:56.913 回答
0

如果您要在整个程序中使用类/方法并且您不需要在每次需要使用该方法时创建一个实例,则静态很有用。

例如

public class StaticExample {

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

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

StaticExample.reusable();

而且您不必创建这样的实例

StaticExample staticExample = new StaticExample();

staticExample.reuseable();

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

于 2013-04-11T23:21:47.753 回答