0

main メソッドを含むクラスで、そのクラスのすべてのメンバーを static として宣言するのは悪い習慣ですか? もしそうなら、なぜですか?メインメソッドで、囲んでいるクラスの新しいインスタンスを作成し、いわばコンストラクターからプログラムを実行する方が良いでしょうか?

編集:(明確化)静的およびシングルトンに関する概念と、一般的にいつ使用するかを知っています。しかし、この質問は特にプログラムのメインクラスに関するものです。@Andrew Tobilko(どうやら彼の答えを削除した..)は、彼の答えから判断して、私の質問を最もよく理解しているようです。私の場合、メインクラスは約 200 LOC で、他の 2 つの小さなクラス (それぞれ < 100 LOC) を使用するため、小さなプログラムです。メインクラスには、Swing GUI の作成といくつかの実行ロジックが含まれており、いくつかのインスタンスが必要なわけではありません。そのため、静的なメイン メソッドからすべてを使用できるように、すべてを静的にするだけでよいと考えました。これは動機付けですか?C# でコーディングしている友人は、大量の static を使用すると、C# では死刑になるだろうと私に言いました。それか何かにいくつかのメモリの問題がある可能性がありますか?

4

4 に答える 4

1

それは「より良い」ものではありません - それはあなたが何をする必要があるかによって異なります。クラスのすべてのメンバー (メソッドを含む) を static として宣言すると、クラスは単純にシングルトンになります。それがあなたのユースケースなら、はい。

属性を静的として宣言することは、クラスのすべてのインスタンスによって共有されるこの属性のコピーが 1 つしかないことを意味します。

ユースケースで複数のインスタンスを作成する必要があり、これらのオブジェクトのそれぞれに属性の独自の「プライベート コピー」が必要な場合は、その属性を静的として宣言しないでください。

実装を続行する前に、トピックの詳細を読むことをお勧めします。

于 2015-11-19T19:17:37.537 に答える
0

静的変数:

staticキーワードは、クラス用に作成されたインスタンスとは独立して存在する変数を作成するために使用されます。クラスのインスタンス数に関係なく、静的変数のコピーは 1 つだけ存在します。

静的変数は、クラス変数とも呼ばれます。ローカル変数は 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 のメイン クラスは、主に「public static void main」として宣言されているため、メインは静的メソッドになります。したがって、それが呼び出す関数は静的でなければなりません。

于 2015-11-19T19:20:22.673 に答える