0 امتیاز
قبل در برنامه نویسی توسط (467 امتیاز)
ویرایش شده قبل توسط

سلام. لطف کنید به کد زیر توجه کنید:

class Document {
	private String name = "Java";

	public Document() {
		Printer printer = new Printer();

		printer.print(new Document());
	}

	@Override
	public String toString() {
		return name;
	}
}

class Printer {

	public void print(Document doc) {
		if (doc.equals("Java Programming")) {
			System.out.println("Print");
		} else {
			System.out.println("Error");
		}
	}
}

public class MainApp {

	public static void main(String[] args) {
		new Document();
	}
}

بعد از اجرای برنامه‌ی فوق، استثنای استثنای java.lang.StackOverflowError رخ میده. میشه راهنمایی کنید چرا؟

1 پاسخ

0 امتیاز
قبل توسط (1.1هزار امتیاز)

برنامه شما در یک loop بینهایت میوفته چون در constructor کلاس Document خودش رو new کردین و حافظه stack پر میشه و خطای stackoverflowerror میگیرید. فکر کنم باید constructor کلاس Document رو بصورت زیر تغییر بدهید.

printer.print(this);

سوالات مشابه

+2 امتیاز
2 پاسخ 528 بازدید
+1 امتیاز
1 پاسخ 395 بازدید
+1 امتیاز
1 پاسخ 519 بازدید
+1 امتیاز
1 پاسخ 738 بازدید
0 امتیاز
0 پاسخ 366 بازدید
سوال شده 7 سال قبل در برنامه نویسی توسط java (0 امتیاز)
0 امتیاز
1 پاسخ 663 بازدید
+1 امتیاز
1 پاسخ 685 بازدید
0 امتیاز
1 پاسخ 575 بازدید
+1 امتیاز
1 پاسخ 396 بازدید
...