مشاهدة النسخة كاملة : Exception ... لدي مشكلة بالـlogic
فيلسوفة زمانها
11-11-2007, 05:37 PM
السلام عليكم ,,
أجد صعوبة في فهم الإكسبشنز مدري إذا إسمها نفس الشي بباقي اللغات , لأن هذا إسمها بالجافا.
بس هي لو كان فيه حالة إستثانيئة تمنع البرنامج من العمل تقوم بإنهاء البرنامج و تبين سبب العطل .. هذا على حد علمي مدري لو غلط - هذي الفكرة العامة صححوني لو غلط-
السؤال :
متى أحطها ؟ وليش؟!!؟!
يعني هو يقول (الكتابJava programing from problem analysis to problem design) إن إحنا محطها عشان الـUnchecked expceptions يعني زي أيش ؟ وليش نحطها لـ الـchecked expceptions إذا الجافا أصلاً يبين لي المشكلة ؟؟؟؟
السؤال الثاني :
الحين فيه شي إسمه throwing and rethrowing an exception
متى وليش نستخدمها ..يعني الكتاب يقول إنه عشان ما نرمي و نبعثر جمل إكسبشن وسط البرنامج ..
إلي فاهمين الله يوفقكم إشرحوا لي .. الله يفتح عليكم و ييسر أموركم دنيا و آخرة
الموضوع جداً مهم بالنسبة لي و أتمنى إني ألقى إجابة بأقرب وقت ممكن :)
UUNUU
12-11-2007, 04:15 PM
الHandling Exception نستخدمها في التعامل مع الاخطاء في البرنامج و ميزتها انه بمجرد مايكشف Exception يوقف تنفيذ الكود و يروح للكود اللي يصلح الخطأ يعني افرض انك كنت مسوي برنامج يسوي عمليات رياضيه و جاء احد امستخدمين وسوى عملية قسمه على صفر لو ان البرنامج مافيه Exception راح يصير Crash للبرنامج و هذا يعتبر عيب في برنامجك انه يوقف فجأه والصحيح هو انك تسوي Exception اذا جاء المستخدم يقسم على صفر يطلع من تنفيذ الكود و يقول للمستخدم ممنوع تقسم على صفر و يخليه يدخل الرقم مره ثانيه
shjoonal3in
12-11-2007, 09:31 PM
مثل ما قال أخوي UUNUU
الإكسبشن تستخدم لحل المشاكل التي تواجه البرنامج ...
تقدرين تستخدمينه في حالات كثيرة لحل أي مشكلة ... مثلاً في حالة عملية القسمة على صفر ... أو في حالة البرنامج يبحث عن ملف وما وجده ... أو في حالة البرنامج متصل بالشبكة وانفصل الاتصال ... وغيره من المشاكل
هذي المشاكل تحلينها باستخدام الإكسبشنز ... بطريقة try and catch
فيكون الميثود أو الجزئية من الكود اللي قد تحصل فيها مشكلة محاطة بـ try ميثود ... وفي حالة حدوث أي خطأ ... تنتقل من بلوك try في الكود من غير أن تكمل باقي السطور في البلوك (إذا كان فيه بقية )إلى بلوك catch واللي هي ميثود تستقبل في الـ parameters أوبجكت من أي نوع من الأكسبشنز تقدرين تحددينه أو تخلينه عام كـ Exception
في حالة ما صارت أي مشكلة ... البرنامج يعمل الكود اللي في بلوك try من غير ما يروح لـ catch
مثلاً ...
try{
object.divide(6,0);
}
مثلاً الميثود divide هنا راح تقسملك الرقم الأول على الثاني .. اللي هم 6 على صفر ..
النتيجة أكيد غير معرفه ... null
عندها لازم البرنامج يعمل
handling for this exception using the catch method as the
following....
catch (Exception e){
System.out.println(" can't divide by zero");
}
طبعاً الـ catch أخذت الإكسبشنز وبلعته ... وظهرت في الشاشة مسج تقول لليوزر ما أقدر أقسم على صفر!!
في الـ catch تقدرين تعملين أي شي كـ حل للمشكلة ... سواء تعرضين مسج للخطأ ... أو تطلبين من اليوزر يدخل رقم جديد ... أو اسم ملف مختلف ... أو تعملين تتبع للكود وتخزنينه بملف أو تعرضينه بالشاشة وتشوفين وين المشكلة ... أو أي شي تعتبرينه حل لمشكلتك ...
لاحظي إن الأكسبشن هنا عام ... مش محدد ... أقصد استخدمنا أوبجكت من كلاس Exception
في حالات أخرى تقدرين مثلاً تحددين نوعه... مثلاً لو تتوقعين يحصل اي مشكلة خلال الاتصال لميثود تستخدم الكونيكشن .... تحطين بالـ catch ... النوع الخاص فيه...
وإذا كانت الميثود تسوي لود لمعلومات من ملف ... و ممكن يكون هالملف غير موجود ... تحطين بالـ catch النوع الخاص فيه ... اللي هو FileNotFoundException وهكـــــذا ... فيه كثير أنواع ...
وكل ما كنتي دقيقة بتحديد نوع الإكسبشن ... كل ما كان أداء البرنامج أفضل...
ملاحظة ... طبعاً الميثود اللي ذكرتها divide بتاخذ الـ inputs من اليوزر ... بطريقة أو بأخرى أنا هنا ما وضحتها .... حطيتها مباشرة ...
عفسة شرحي ... مو ؟^^
حاولي تبحثين في القوقل ... حطي سؤالك وبيطلع لك مئات الأرتيكلز والمواقع شرح للإكسبشنز وأنواعها ... بحر شدي حيلك واغطسي ...
السموحة منك ... والله يوفقك ... :)
فيلسوفة زمانها
13-11-2007, 06:28 PM
ماشاء الله :)
شكراً .. الصراحة الشرح جداص وافي .. :)
بس باقي عندي سؤال أخير (إن شاء الله) الـStream .. إلي تمر فيه المعلومات إلي من المستخدم لنفرض إني طلبت من المستخدم يدخل رقم .. وبالغلط دخل حرف ..
يعني ..
System.out.println("Please Enter the Number Zero:");
Int X = input.nextInt();
نفرض إن المستخدم دخل "F0" بدل المطلوب .. الكتاب إلي عندي يقول إن الحل هو ..
catch (InputMismatchException obj)
{
String str = input.next();
System.out.print("Error: "+obj.toString()+" " +str);
}
السؤال هنا ..
الستريم .. أيش هو بالضبط .. وكان هذي طريقة العلاج ؟ و بالنسبة للجملة التي يتم طبعاتها في الأخير مو مهمة بس عشان التوضيح صح ؟
و الله يوفقكم دنيا و آخرة :)
shjoonal3in
13-11-2007, 08:40 PM
بس باقي عندي سؤال أخير (إن شاء الله) الـStream .. إلي تمر فيه المعلومات إلي من المستخدم لنفرض إني طلبت من المستخدم يدخل رقم .. وبالغلط دخل حرف
يعني ..
System.out.println("Please Enter the Number Zero:");
Int X = input.nextInt();
نفرض إن المستخدم دخل "F0" بدل المطلوب .. الكتاب إلي عندي يقول إن الحل هو ..
catch (InputMismatchException obj
{
String str = input.next();
System.out.print("Error: "+obj.toString()+" " +str);
}
السؤال هنا ..
الستريم .. أيش هو بالضبط .. وكان هذي طريقة العلاج ؟ و بالنسبة للجملة التي يتم طبعاتها في الأخير مو مهمة بس عشان التوضيح صح ؟
و الله يوفقكم دنيا و آخرة :)
آآآآآمين ... ^^
هلا أختي ...
بالنسبة للستريم...
هي طريقة الجافا تستخدمه في حالة البرنامج يبي ياخذ ويعطي inputsو outputs...
يعني إذا البرنامج يبي يقرأ من/أو يكتب إلى ... فايل أو سوكيت أو ..الخ
تروحين تستخدمين هالكلاسات عشان تساعدك في هذا الشيء ...
الستريم يمرر المعلومات من وإلى البرنامج ...
على فكرة لاحظي في مثال الكتاب InputMismatchException استخدم نوع معين من الإكسبشنز مناسبة للمشكلة اللي متوقعها تحصل... اللي هي إن الـ input مو اللي يبغيه البرنامج ...
والجملة الأخيرة المطبوعة عالشاشة على قولتك للتوضيح بس ... ولاحظي إنها تطبع كلمة Error وتطبع الإكسبشن على شكل string وتطبع ال str اللي هو المدخل ( الخطأ) اللي أدخله اليوزر ...
واسمحيلي إذا كنت ما فهمت سؤالك ... ^^
فيلسوفة زمانها
22-11-2007, 07:26 PM
شكراً
وجزاك الله خيراً :)
جميع حقوق برمجة vBulletin محفوظة ©2025 ,لدى مؤسسة Jelsoft المحدودة.
جميع المواضيع و المشاركات المطروحة من الاعضاء لا تعبر بالضرورة عن رأي أصحاب شبكة المنتدى .