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

سؤال في ال Exception البرنامج صحيح لكن كيف تم خروج ال Run بهذه الطريقة

مغلق
بدأه شجرة زيتون في 18 نوفمبر 2007 · 5 رد · 770 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

عندي سؤال في الإكسيبشن عملت كلاس و فيه try و كل شيء تمام

ال run مشى صحيح لكن انا توقعت ان فيه سطر يخرج قبل سطر اخر

هل هناك قاعدة معينة في الإكسيبشن تجعل السطر الموجود فيه كلمة super

تؤجل لما بعد ؟؟؟

اولا صممت Exception جديد كالتالي :

public class myExcepation extends Exception
{

public myExcepation()
{
super(" my exception thrown!");
System.out.println("immediate attention required!");
}

public myExcepation(String msg)
{
super(msg);   //  توقعت ان هذه الجملة تنفذ اولا 
System.out.println("attention required!");
}

}// end class

ثم البرنامج التالي الذي يحتاج ال Exception السابق

public class test_myexeption
{
public static void main(String[] args)
{
try
{
throw new myExcepation(" my day , my day");
}//end try
catch (myExcepation e)
{
System.out.print(e.toString());
} // end catch
}
}

الناتج كما يلي :

attention required!
myExcepation:  my day , my day

سؤالي هو

كنت اتوقع في الناتج نفس ما طلع معي

لكن السطر الثاني هو الأول و العكس .

فكيف تم سريان التنفيذ هكذا رغم ان جملة super(msg)

لمفروض انها نفذت اولا .

#2

مخرج البرنامج صحيح

super(msg)

تقوم بإسناد السترينق msg إلى Exception (String msg) constructor

فهي لاتقوم بطباعة شئ فقط إسناد القيمه

#3

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

شكرا اخي على الرد

لكن هي في الواقع عملت ، يعني طبعت محتوياتها my day , my day

لكن طباعتها جاءت في الترتيب الثاني .

رغم ان الأمر في تصميم الإكسبشن جاء في البداية . حيث ننادي على SUPER

و نمرر له النص

تم تعديل هذه المشاركة بواسطة شجرة زيتون في 22 نوفمبر 2007 في 16:11

#4

عند هذا السطر من الكود

throw new myExcepation(" my day , my day");

ينتقل التنفيذ إلى الكونستراكتور التالي

public myExcepation(String msg)
{
super(msg);   //  توقعت ان هذه الجملة تنفذ اولا 
System.out.println("attention required!");
}

طيب خلينا واحدة واحدة

السطر الأول في الكود السابق بيقول خزن الرسالة المبعوتة (my day, my day) في الأوبجيكت اللي اتعمل، يعني ما طلبناش منه انه يطبع حاجة. هو بس خزن الرسالة عنده.

السطر الثاني في الكود السابق بيقول اطبع (attention required)، فديه أول جملة تتطبع، وهذا الذي حدث فعلا.

طيب إيه اللي حصل بعد كده

الإكسبشن اترمى انتقل التنفيذ إلى الجزء اللي أمسك الإكسبشن، وهو الجزء التالي:

catch (myExcepation e)
{
System.out.print(e.toString());
}

وهذا السطر يقول اطبع ما يرجع من الميثود toString

طيب الميثود ديه بترجع إيه؟

بترجع الرسالة اللي متخزنة في الأوبجيكت واللي هي : (my day, my day) وقبلها اسم الكلاس بتاعة الإكسبشن

وداه السطر الثاني اللي طبع.

أرجو أن أكون قد اوضحت لك ما قصده الأخ عيسى

#5

الف شكر عالشرح الحلو للإكسبشن

تسلمونـ عليه

...

#6

شكرا لك اخي على التوضيح

الفكرة وصلت و فهمتها ... الله يجزيك الخير .

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

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…