我正在处理一些代码。它基本上是用户输入并创建有向图。一个人可以单程旅行,另一个人则相反。输出是他们可以访问的地方的重叠。
我的大部分工作都按照我想要的方式工作,但我关注的是静态的使用。我似乎并不完全理解它,无论我在哪里,我都无法找到它的确切用途或如何摆脱它。
有人可以帮助我了解静电是什么以及为什么会有用?
另外,将大部分代码从MAIN移到辅助方法会更好吗?如果我这样做,我必须将所有变量从main移到顶层,然后它们都必须声明为静态?!
答案 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();
我希望这可以帮助您决定是否使用静态。