0

ここに私の内部および外部クラスファイル:-

package com.demo;

public class Outer {
int outer_x=100;

void test(){
    Inner inner =new Inner();
    inner.display();
}
public class Inner {
void display(){
    Outer ob=new Outer();
    ob.test();

    System.out.println("display: outer_x= "+outer_x);
}
}

}

別のメイン クラス アクセス外部クラス メンバー:-

package com.demo;

class InnerClassDemo{
    public static void main(String args[]){
        Outer outer=new Outer();
        outer.test();
    }
}

例外:-

Exception in thread "main" java.lang.StackOverflowError
    at com.demo.Outer.<init>(Outer.java:3)
    at com.demo.Outer$Inner.display(Outer.java:12)
    at com.demo.Outer.test(Outer.java:8)

どうすればこの問題を解決できますか?

4

4 に答える 4

2

メソッドは をtest作成し、Innerそのdisplay()メソッドを呼び出します。これは、 を作成し、Outerそのメソッドを呼び出しますtest。十分な数のメソッドが呼び出されてスタック スペースがいっぱいになり、エラーStackOverflowErrorが発生するまで、これが永遠に続くことをコード内で止めるものは何もありません。

callを持っていないか、 testcalldisplayを持っていません。displaytest

于 2013-11-04T16:50:44.863 に答える
0

呼び出しには常にプログラムスタックを超える無限のメソッド呼び出しがあるため、StackOverFlowError が発生します。

テスト メソッドはディスプレイを呼び出し、ディスプレイ メソッドはテストを無条件に呼び出します。

再帰メソッドのベース ケースを定義することが基本的な要件であるため、再帰メソッド呼び出しを返し、停止するベース ケースを定義する必要があります。

こちらもご覧ください

再帰

于 2013-11-04T16:52:22.567 に答える
0

Outer.test を呼び出す Inner.display を呼び出す Outer.test を呼び出す Inner.display を呼び出す Outer.test を呼び出す Inner.display ...

これは、プログラムがスタック スペースを使い果たすまで続きます。

于 2013-11-04T16:49:46.923 に答える