Java 静电坏吗?如何删除静态变量?

Java 静电坏吗?如何删除静态变量?,java,variables,static,global-variables,Java,Variables,Static,Global Variables,我有一些代码,我正在工作。它基本上接受用户输入并创建一个有向图。一个人可以走一条路,另一个人可以走相反的路。输出是他们可以访问的位置的重叠 我的大部分东西都是按我所希望的方式工作的,但我关心的是我所拥有的静态的使用。我似乎不完全理解它,无论我看在哪里,我都找不到它的确切用途或如何摆脱它 有人能帮我理解什么是静电,为什么它会有帮助吗 另外,将大部分代码从MAIN方法移动到helper方法是否更好?如果我这样做,我必须将所有变量从main移到类的顶部,然后它们都必须声明为static 如果您要在整个

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

我的大部分东西都是按我所希望的方式工作的,但我关心的是我所拥有的静态的使用。我似乎不完全理解它,无论我看在哪里,我都找不到它的确切用途或如何摆脱它

有人能帮我理解什么是静电,为什么它会有帮助吗


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

如果您要在整个程序中使用类/方法,而不知道每次需要使用该方法时如何创建实例,那么Static非常有用

public class StaticExample {

  public static void reusable() {
  //code here
  }
}
这意味着你可以像这样使用它

StaticExample.reusable();
StaticExample staticExample = new StaticExample();

staticExample.reuseable();
您不必创建这样的实例

StaticExample.reusable();
StaticExample staticExample = new StaticExample();

staticExample.reuseable();

我希望这有助于您决定是否使用静态

如果您要在整个程序中使用类/方法,而不知道每次需要使用该方法时如何创建实例,那么Static非常有用

public class StaticExample {

  public static void reusable() {
  //code here
  }
}
这意味着你可以像这样使用它

StaticExample.reusable();
StaticExample staticExample = new StaticExample();

staticExample.reuseable();
您不必创建这样的实例

StaticExample.reusable();
StaticExample staticExample = new StaticExample();

staticExample.reuseable();

我希望这有助于您决定是否使用静态

一切都必须是静态的原因是您没有创建任何对象。如果要通过在main方法中调用new来创建对象,则可以在该对象上使用非静态变量。这并不是一个给你一个指导你为什么要使用面向对象设计的好地方;你可以在网上找到其中一个,阅读上面的评论,给出一个可能的参考。但是一切都必须是静态的原因是因为它都是从主方法运行的,在java中,主方法总是静态的。如果要在某处调用new,可以使用非静态变量。

一切都必须是静态的原因是因为没有创建任何对象。如果要通过在main方法中调用new来创建对象,则可以在该对象上使用非静态变量。这并不是一个给你一个指导你为什么要使用面向对象设计的好地方;你可以在网上找到其中一个,阅读上面的评论,给出一个可能的参考。但是一切都必须是静态的原因是因为它都是从主方法运行的,在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 number设置为10


明白了吗?

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

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 number设置为10


明白了吗?

看起来很多静态方法findNodeInList等都将表示映射的ArrayList作为第一个参数。因此,您可以使用一个类映射来代替静态映射,它存储节点列表并在节点上具有方法。然后主方法将读取输入,但不必直接管理任何节点。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(...));
  }
}

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

看起来很多静态方法findNodeInList等都将表示映射的ArrayList作为其第一个参数。因此,您可以使用一个类映射来代替静态映射,它存储节点列表并在节点上具有方法。然后主方法将读取输入,但不必直接管理任何节点。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(...));
  }
}

这使所有与节点/映射相关的内容都得到了很好的封装,而不是与读取数据相关的内容混在一起。

我妻子说静态保护很好:。。。但是为了回答您的问题,static使方法在类级别而不是实例级别可用。静态方法只能访问静态变量,因为它们在该级别上没有实例。无论如何,我认为您可能会从中受益:如果这是小规模的,那么在实例级别使用它不是更简单吗?或者主要方法通常都是最小的,这不是有缺点吗。你很可能只是创建了一个实例,然后告诉它做一些事情。但从我看到的代码来看,
我假设你做这件事不是为了做家庭作业,就是对java不熟悉,所以这可能会决定你的方法……你可以说,我对java不熟悉。我正在努力学习这一点以及我正在做的其他事情。对于这个例子,我现在最关心的一个问题是如何使它在可能的大范围内高效运行。您应该首先查看一些java初学者教程。在担心效率和规模之前,您应该先解决一些基本问题。我想这是建设性的,所以我希望你不要生气。我妻子说静电防护很好:。。。但是为了回答您的问题,static使方法在类级别而不是实例级别可用。静态方法只能访问静态变量,因为它们在该级别上没有实例。无论如何,我认为您可能会从中受益:如果这是小规模的,那么在实例级别使用它不是更简单吗?或者主要方法通常都是最小的,这不是有缺点吗。你很可能只是创建了一个实例,然后告诉它做一些事情。但是从我看到的代码来看,我假设你不是在做作业,就是不熟悉java,所以这可能决定了你的方法……你可以说我是java新手。我正在努力学习这一点以及我正在做的其他事情。对于这个例子,我现在最关心的一个问题是如何使它在可能的大范围内高效运行。您应该首先查看一些java初学者教程。在担心效率和规模之前,您应该先解决一些基本问题。我希望这是建设性的,所以我希望你不要生气。这意味着变量存储在内存中的特定位置,不管创建了多少个正确的实例?是的,类似的。设置一次,该对象的每个实例都将使用它。不管怎么说,可能会有更专业的人把我的话给弄糊涂了,但是atm,我认为你是对的。另外,我也不像你们那个样是个专家,若我发现正确的话,那个么我总是在公共修改不够的时候使用静态变量,并给我带来奇怪的访问错误。此后,这些错误消失了。我只是想给你一个我如何使用静态的真实例子。看看这个,我很乐意帮忙。好的编码!这意味着,不管创建了多少个正确的实例,变量都存储在内存中的特定位置?是的,类似的。设置一次,该对象的每个实例都将使用它。不管怎么说,可能会有更专业的人把我的话给弄糊涂了,但是atm,我认为你是对的。另外,我也不像你们那个样是个专家,若我发现正确的话,那个么我总是在公共修改不够的时候使用静态变量,并给我带来奇怪的访问错误。此后,这些错误消失了。我只是想给你一个我如何使用静态的真实例子。看看这个,我很乐意帮忙。好的编码!