2011-07-25 9 views
3

特定の値のセットでPackingCaseオブジェクトを構築しようとしています。プログラムはコーディング中にエラーを表示しませんが、実行中にこのエラーが発生します。Javaで新しいオブジェクトを構築する際のスタックオーバーフローエラー

Exception in thread "main" java.lang.StackOverflowError 
at assignment.pkg2.PackingCase.<init>(PackingCase.java:59) 
at assignment.pkg2.PackingCase.<init>(PackingCase.java:60) 

マイコードは次のとおりです。 "PackingCase PC1 =新しいPackingCase();"

public class PackingCase { 
// private fields go here 

int serialNumber; 
int timesUsed; 
int timeCreated; 
int timeStored; 
String name; 
String description; 


void setCase(int s, int TU, int TC, int TS){ 
    serialNumber = s; 
    timesUsed = TU; 
    timeCreated = TC; 
    timeStored = TS; 

} 

double volume(){ 
    return serialNumber*timesUsed*timeCreated*timeStored; 
} 

public PackingCase(){ 
    PackingCase PC1 = new PackingCase(); 
    double vol; 

    PC1.setCase(1, 2, 3, 4); 

    vol = PC1.volume(); 
    System.out.println(""+vol); 




} 

ライン59は、 "パブリックPackingCase(){"、およびライン60です。事実上同じコード構造を使った例を見て、何のエラーもなくコンパイルすることを考えれば、何が起こっているのか分かりません。どんな助けもありがとう。

+1

+1:スタックオーバーフローエラーメッセージ – bdares

答えて

10

新しいオブジェクトを作成するたびに、スタックがオーバーフローするまで別の新しいオブジェクトが作成されます(など)。

public PackingCase(){ 
    this.setCase(1, 2, 3, 4); 
    vol = this.volume(); 
    System.out.println(""+vol); 
} 
+0

@pst - pedanticは "but ..."の後に続く必要はありません。ありがとう!] – MByD

+0

@Downvoter - いつものように、私は本当にコメントを感謝します。 – MByD

1
public PackingCase(){  PackingCase PC1 = new PackingCase(); ...} 

コンストラクタを再帰的にstackoverflowのを引き起こして、自分自身を呼び出す:

代わりに、それはそのように見えるはずです。

3

コンストラクタで再帰呼び出しがあります。空のコンストラクタを残す(単にそれを削除)し、main方法から、このコードを実行します。

public static void main(String[] a){ 
    PackingCase pc1 = new PackingCase(); 
    pc1.setCase(1, 2, 3, 4); 
    double vol = pc1.volume(); 
    System.out.println(""+vol); 
} 
0

あなたは無限ループを作成し、newのハンドラ内newを呼び出している(とスタックが有限であることから、それは最終的に実行されますスペースの)。しかしpublic PackingCase() { ... }コンストラクタです。これは、誰かがすでにnew PackingCase()を使用している場合にのみ呼び出されることを意味します。コンストラクタ内のコードは、オブジェクトを作成する(スペースを割り当てる)必要はなく、単に初期化します(フィールドの値を設定します)。

関連する問題