الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشكلة وتبغى حل ؟؟

مغلق
بدأه abeer في 20 مايو 2003 · 11 رد · 985 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته::

قد يكون السؤال سهل لكثير منكم ولكن فعلا السؤال حيرني انظر الى هذا الكود البسيط

public class con1{

public con1(){

System.out.println("I am inside constructor");

con1 c1=new con1();

}

public static void main(String[]args){

con1 c=new con1();

}

}

لماذ يتم طباعة i am inside constructor بشكل متواصل ...

وشكرا

#2

السلام عليكم ورحمة الله وبركاته

السبب هنا

con1 c1=new con1();

لان الاصل فى تنفيذ البرنامج ان يبحث عن ال main method ويلاقى فيها new object من الكلاس

فبالتلى اول شئ ينفذه فى الكلاس هو constructor

الذى يجد بداخلة

con1 c1=new con1();

وبالتالى يدور على main مرة اخرى وهكذا وفى كل مرة طبعا ينفذ الكود داخل constructor

اتمنى يكون الكلام واضح(gift)

#3

اشكرك ولكن الم تلاحظ انه تطبع بشكل متواصل الى الى ان تتوقف بعد ثمان ثوان تقريبا ...

فما هو السبب ؟؟؟؟؟؟؟؟؟؟؟

#5

it stops becuse the stack is full

اللهم انا نسألك علما نافعا ونعوذ بك من حماقة الجهلاء
#6

please try with this

import java.*;
import java.io.*;
public class Test{
	static int count=0;
	static Test c1=null;
	public  Test(){

		count++;
		System.out.println("I am  nr "+ count);
		if(c1!=null)
		c1=new Test();

	}


	public static void main(String[]args){

		Test c=new Test();

}
}
اللهم انا نسألك علما نافعا ونعوذ بك من حماقة الجهلاء
#7

السبب في ذلك هو عبارة

"

con1 c1=new con1()

"

الموجودة ضمن الـ Constructor والتي تؤدي إلى استدعاءه لنفسه بشكل لانهائي.

أما عن سبب التوقف بعد فترة معينة فهو امتلاء الذاكرة أو ما يسمى هنا بـ Stack بالأغراض من الصف con1 و هو ما عبر عنه الأخ Khwlani بـ Stack is full ويعبر عن ذلك أيضاً بعبارة Stack over flow

#8

حل سريع للغاية....

كبر الذاكرة عندك...

وستزيد المدة عن 8 ثواني...

وبعدها ستأكد من أن كلام الإخوة السابق صحيح!!!

ملحوظة: ممكن بدلا من دفع فلوس وتغيير الذاكرة...

إنك تصدق الشباب بدون ما تجرب:rolleyes:

أخوكم...

مجهــــ:Pـــووول

#9

طبعا ً راح يطبع نفس الجملة إلى أن تمتلئ الذاكرة .

والفكرة هنا تشبه فكرة ال recursive methods حيث أنه تستدعي نفسها بنفسها الى أن يتحقق شرط معين . ولكن في حالتك انت فإن ال constructor سوف يستدعي نفسه الى مالا نهاية وطبعا ً كل مرة سوف ينفذ الكود الذي بداخله

نصيحة : لا تزيدي الذاكرة لأن كلام الشباب صحيح :P:D

#10

يا شباب أنا أعرف أنه الـStack تكون مليانه

لكن اللي فاقع قلبي أنه ولا حتى مكلف على نفسه يعطيك أي Exception

#11

بصراحة هذي مشكلة ثانية ,ليش ما يعطي exception ???!!! :(

يا شباب خلونا نفكر شوية وإن شاء الله نوصل لحل:rolleyes:

هذا الموضوع مغلق.

مواضيع مشابهة