我有一些代码,我正在工作。它基本上是接受用户输入并创建一个有向图。一个人可以走一条路,另一个人可以走相反的路。输出是他们可以访问的地方的重叠。
我让大多数东西都按照我想要的方式工作,但我关心的是我所拥有的静态的使用。我似乎不完全理解它,无论我往哪里看,我都找不到它的确切用途或如何摆脱它。
有人能帮我理解静态是什么,为什么它会有帮助吗?
另外,将大部分代码从MAIN移到helper方法会更好吗?如果我这样做,我必须将所有变量从main移到类的顶部,然后它们都必须声明为静态?!
一切都必须是静态的原因是因为您没有创建任何对象。如果要通过在主方法中调用new来创建对象,则可以在该对象上使用非静态变量。这里并不是一个给你讲解为什么你可能想要使用面向对象设计的好地方;你可以在网上找到其中的一个来阅读(上面的一个评论者给出了一个可能的参考)。但所有东西都必须是静态的原因是因为它都是从main方法运行的,而main方法在java中总是静态的。如果要在某处调用new,可以使用非静态变量。
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。
明白了吗?
看起来你的很多静态方法(findNodeInList等)都把ArrayList(它代表一个map)作为它们的第一个参数。因此,您可以使用类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(...));
}
}
这样可以很好地封装所有与节点/映射相关的内容,而不会与读取数据相关的内容混在一起。
Static是很有用的,如果你打算在整个程序中使用类/方法,并且你不需要在每次需要使用该方法时创建一个实例。
为例
public class StaticExample {
public static void reusable() {
//code here
}
}
这意味着你可以这样使用
StaticExample.reusable();
你不需要创建这样的实例
StaticExample staticExample = new StaticExample();
staticExample.reuseable();
我希望这能帮助你决定是否使用静态。