0

在包含 main 方法的类中,将该类的所有成员声明为静态是不好的做法吗?如果是这样,为什么?在 main 方法中,创建一个封闭类的新实例,然后从构造函数中运行程序会更好吗?

编辑:(澄清)我知道关于静态和单例的概念以及通常何时使用它。但是这个问题专门针对程序的主类。@Andrew Tobilko(显然删除了他的答案..)从他的回答来看似乎最能理解我的问题。就我而言,我的主类大约是 200 LOC,它使用了另外两个小类(每个小于 100 LOC),所以它是一个小程序。主类包含创建一个 Swing GUI 和一些运行逻辑,不需要多个实例,所以我想我可以将所有内容都设为静态,以便能够使用静态主方法中的所有内容。这是有动机的吗?一位用 C# 编写代码的朋友告诉我,在 C# 中使用大量静态意味着死刑。会不会有一些内存问题或其他什么?

4

4 回答 4

1

这不是“更好”——这取决于你需要做什么。将类的所有成员声明为静态(包括方法)只是将类变成单例。如果那是您的用例,那么是的。

将属性声明为静态意味着该属性只有一个副本,该副本由该类的所有实例共享。

如果您的用例需要创建多个实例,并且这些对象中的每一个都应该有自己的属性“私有副本”,那么您不应该将该属性声明为静态。

建议在继续实施之前阅读有关该主题的更多信息。

于 2015-11-19T19:17:37.537 回答
0
  • 通常用于常量的类将保存所有最终静态变量。
  • 实用程序类包含所有静态方法。例如 - Java 中的数学类
于 2015-11-19T22:07:45.060 回答
0

静态变量:

static关键字用于创建独立于为类创建的任何实例而存在的变量。无论类的实例数量如何,都只存在一个静态变量的副本。

静态变量也称为类变量。局部变量不能声明为静态的。

静态方法:

static关键字用于创建独立于为类创建的任何实例而存在的方法。

静态方法不使用定义它们的类的任何对象的任何实例变量。静态方法从参数中获取所有数据并根据这些参数计算某些东西,而不引用变量。

可以使用类名后跟一个点以及变量或方法的名称来访问类变量和方法。 static修饰符用于类成员。仅当您想在整个程序中获取实例的单个副本时才应使用它。

下面是解释它的例子,

public class InstanceCounter {

   private static int numInstances = 0;

   protected static int getCount() {
      return numInstances;
   }

   private static void addInstance() {
      numInstances++;
   }

   InstanceCounter() {
      InstanceCounter.addInstance(); 
   }

   public static void main(String[] arguments) {
      System.out.println("Starting with " +
      InstanceCounter.getCount() + " instances");
      for (int i = 0; i < 500; ++i){
         new InstanceCounter();
      }
      System.out.println("Created " +
      InstanceCounter.getCount() + " instances");
   }
}

这将产生以下结果:

Started with 0 instances
Created 500 instances

您可以查看此DuplicateQuestion 以供参考

于 2015-11-19T19:19:48.210 回答
0

静态实体可以调用静态实体或与静态实体交互,即静态方法只能调用静态方法或与静态变量交互。这是静态方法的属性。java中的main类大多被声明为“public static void main”,这使得main成为一个静态方法。因此,它调用的函数是静态的。

于 2015-11-19T19:20:22.673 回答