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