JAvaの2つのクラスが互いに参照を持つ小さな問題
今日、小さなプログラムを書くときに問題が発生しました.例えば、2つのクラスで相互に参照を持ちたいと思っています.
1.1つのクラスは画板であり、もう1つのクラスは画板の中の1つの図形である.
2.グラフィックを描くには、グラフィックの参照を持つ必要があります.
3.図形は、自身の属性に応じて画板内の他の図形を変更することが望ましいため、画板の参照を持って画板を操作するリソースが必要である.
次のコードがあります.
パネル:
グラフィック:
エラーメッセージ:
Exception in thread "main"java.lang.StackOverflowError
表面的には互いにメンバー変数を持っているように見えますが、リファレンスを付与しますが、実際のコンパイルではメモリオーバーフローが原因でエラーが発生します.
私はエラーのヒントによって発見して、2つのクラスは絶えずinitして、最終的にメモリのオーバーフローを招いて、上述のコードを分析して、TankWarが最初に初期化する時、Tankの構造方法を呼び出して、TankはまたTankWarの引用を伝えて、この過程の中で、TankWarは1回再描画されたようで、それから2つはまた互いに絶えず呼び出し始めます....
私の解決策は静的メンバー変数で、TankWarでTankを静的メンバー変数として定義します!静的オブジェクトのデータはグローバルで一意であるため、再描画されず、常にinitされません.
私はjavaに対しても熟知していないため、具体的な原因は私も探し当てていないで、ネット上で言う方法は試したことがあってもあまり役に立たないで、もし文章のあなたが見解があるならば、指摘を歓迎します!
1.1つのクラスは画板であり、もう1つのクラスは画板の中の1つの図形である.
2.グラフィックを描くには、グラフィックの参照を持つ必要があります.
3.図形は、自身の属性に応じて画板内の他の図形を変更することが望ましいため、画板の参照を持って画板を操作するリソースが必要である.
次のコードがあります.
パネル:
public class TankWar extends Frame {
...
Tank myTank = new Tank(50, 50, this);
...
}
グラフィック:
public class Tank {
...
/**
* Tank TankWar , Tank , this
* Tank TankWar ( )
* ,tank TankWar bullet
*/
TankWar tw = new TankWar();
public Tank(int x, int y) {
this.tank_x = x;
this.tank_y = y;
}
public Tank(int x, int y, TankWar tw){
this(x, y);
this.tw = tw;
}
...
}
エラーメッセージ:
Exception in thread "main"java.lang.StackOverflowError
表面的には互いにメンバー変数を持っているように見えますが、リファレンスを付与しますが、実際のコンパイルではメモリオーバーフローが原因でエラーが発生します.
私はエラーのヒントによって発見して、2つのクラスは絶えずinitして、最終的にメモリのオーバーフローを招いて、上述のコードを分析して、TankWarが最初に初期化する時、Tankの構造方法を呼び出して、TankはまたTankWarの引用を伝えて、この過程の中で、TankWarは1回再描画されたようで、それから2つはまた互いに絶えず呼び出し始めます....
私の解決策は静的メンバー変数で、TankWarでTankを静的メンバー変数として定義します!静的オブジェクトのデータはグローバルで一意であるため、再描画されず、常にinitされません.
static Tank myTank = new Tank(50, 50);
私はjavaに対しても熟知していないため、具体的な原因は私も探し当てていないで、ネット上で言う方法は試したことがあってもあまり役に立たないで、もし文章のあなたが見解があるならば、指摘を歓迎します!