0

簡単な Java 理論の質問があります。main() メソッドと他のメソッドを含むクラスを作成し、その main メソッド内でクラスのインスタンス (new Class() など) を呼び出すと、なぜ再帰が発生しないのか少し混乱します。 . クラスの他のメソッドがウィンドウを作成し、データをプロットするグラフ作成プログラムを書いているとしましょう。メイン メソッドでは、クラス自体のインスタンスを呼び出しますが、表示されるウィンドウは 1 つだけです。それは素晴らしいことで、私が望んでいたことですが、直感的に、クラスのインスタンスをそれ自体から作成すると、何らかの再帰が発生するはずです。これを防ぐものは何ですか?これが例です(私の考えでは、不要な再帰を防ぐものは何なのか疑問に思っています):

     public class example{
         method1(){create Jpane}
         method2(){paint Jpane}
         method 3(){do some computations}

         public static void main(String[] args){
            new example(); // or create Jblah(new example()); 
         }
      }
4

4 に答える 4

8

mainメソッド (プログラムのエントリ ポイントにすぎません) とコンストラクターを混同していると思います。

たとえば、次のように書いた場合:

public class Example {
    public Example() {
        new Example(); // Recursive call
    }

    public static void main(String[] args) {
        // Will call the constructor, which will call itself... but main
        // won't get called again.
        new Example(); 
    }
}

それからそれは強打するでしょう。

于 2013-02-07T18:41:48.897 に答える
1

クラスをインスタンス化しても、mainメソッドは自動的に実行されません。アプリケーションへのエントリ ポイントとして使用するだけで、一度実行されます。

于 2013-02-07T18:41:33.887 に答える
1

再帰は悪いことではありません。無限再帰がない理由を尋ねていると思います。

見逃している大きな概念は、 new Example() を呼び出すときにメモリを割り当ててから、1 つのメソッド (コンストラクター) だけを呼び出すということです。はmain()、明示的に呼び出さない限り、プログラム全体の開始時にのみ呼び出されます。

--- 編集して追加

public class MyMainClass {
  public static void main(String arg[]) {
    Calculator c = new Calculator();
    int x = c.factorial(5);
  }
}

class Calculator {

  Calculator() { }

  public int factorial(int x) {
    if (x > 1) return x * factorial(x - 1);
    else return 1; // WARNING: wrong answer for negative input
  }
}

factorial はインスタンス変数を使用しないため、を使用しなくてもstaticas として宣言して呼び出すこともできましたが、見せびらかすことがこの例の要点だったので、私はそうしませんでした。Calculator.factoral(5);newnew

于 2013-02-07T18:43:41.257 に答える
0

クラスに main メソッドがあるからといって、クラスを作成するたびにそれが呼び出されることを意味します。

Java はプログラムのエントリ ポイントとして main を探し、起動時にそれを呼び出します。Java に関する限り、Java はプログラムへのエントリ ポイントを作成する役割を果たしているため、それらからインスタンス化するオブジェクトは main を呼び出しません。

于 2013-02-07T18:42:17.157 に答える