معالجة الإستثناءات في جافا - ProgrammerTech
Language:

Search

معالجة الإستثناءات في جافا

  • Share this:
معالجة الإستثناءات في جافا

الإستثناءات Exception

الإستثناءات ( Exception ) لغة جافا, هي أخطاء غير متوقعة تحدث من قبل المبرمج أو المستخدم مما يؤدي إلى توقف عمل البرنامج بشكل غير طبيعي. يوجد نوعان من الأخطاء و هي خطأ يقع به المبرمج و خطأ يقع به المستخدم و المبرمج هو من يقوم بكتابة و بناء البرنامج و المستخدم هو الذي يقوم بإستخدام البرنامج و إدخال البيانات. الخطأ الذي يقع به المبرمج عند كتابة الكود يتولى أمره المبرمج و يقوم بإصلاحه. ظهور خطأ اثناء إستخدام التطبيق ويؤدي إلى إيقاف التطبيق هو أمر سيئ جداً. لأن هذا يؤدي إلى نفور المستخدمين من التطبيق و عدم رغبتهم في العودة إلى استخدامه مجدداً.

هدفنا في هذا الدرس هو الخطأ الذي يقوم به المستخدم و هو عند إدخال البيانات قد يدخل بيانات خاطئة مما يؤدي إلى تعليق البرنامج و تهنيجه و وقوفه عن العمل. لذلك المبرمج يجب أن يتوقع تلك الأخطاء و إستكشافها, فمثلاً عند الإدخال قد يقوم المستخدم بإدخال. بيانات نصية في مكان بيانات عددية و هذا مرفوض تماماً لأن الأعداد لا تقبل سوى بيانات عددية. أو يقوم المستخدم عند القسمة على قيمة صفرية و يتم القسمة على صفر و يحدث هناك خطأ. أو يقوم المستخدم بإدخال بيانات كثيرة جداً يؤدي إلى خطأ إسمه Overflow هذه الأخطاء يتوقعها المبرمج.

 

الأسباب التي تؤدي إلى حدوث إستثناء في جافا

  1. في حال كان المستخدم متصل في الشبكة وفجأة إنقطع إتصاله فيها.
  2. بحال كان البرنامج يقوم بقراءة بيانات ملف نصي و الملف النصي هذا غير موجود.
  3. بحال قام المستخدم بإدخال قيمة لا تتطابق مع نوع المتغير الذي سوف تخزن القيمة فيه.
  4. بحال قام هذا المستخدم بإدخال رقم لأندكس غير موجود في المصفوفة أو متغير نصي.
  5. في حال قام المستخدم بالقسمة على قيمة صفرية.

كيف نقوم بمعالجة الأخطاء التي يقع بها المستخدم في جافا؟

الجواب هو أن نقوم بمعالجة هذا النوع من الأخطاء بما يسمى try و catch. يتم وضع الخطأ الذي يقع به المستخدم ما بين try و catch ليقوما بتجاهل هذا الخطأ أو تصيده و منع البرنامج من التعليق و الخروج من العمل.

الصيغة العامة try و catch في جافا

try{
الأوامر الذي نتوقع حدوث خطأ بها
}catch(نوع الإستثناء){
 الأوامر الذي تتنفذ في حال التقاط إستثناء
}

في منطقة try نقوم بوضع الكود الذي نشك أن يحدث مشاكل فيه أو استثناء. أما catch فهي تكون مهمتها طباعة رسالة تظهر نوع هذا الإستثناء والفائدة من ذلك أن try - catch سوف. تصطاد الخطأ وتمنعه من إحداث تعليق أو تهنيج في البرنامج.

مثال

package lessontry;
import java.util.Scanner;
public class Lessontry {
    public static void main(String[] args) {
        Scanner s=new Scanner(System.in);
        int x1,x2,x3;
        x1=s.nextInt();
        x2=s.nextInt();
        x3=x1/x2;
        System.out.println(x3);
        }
    }

عند تشغيل هذا البرنامج إذا قمنا بعملية قسمة عادية فلن يحدث أي خطأ. أما إذا قمنا بالقسمة على 0 سوف يظهر خطأ و يعلق البرنامج لدى المستخدم و يخرج من البرنامج. لتفادي هذه المشكلة يجب أن نتصيّد ونتوقع هذه الأخطاء و وضعها ضمن try و catch لتجنب. هذه المشاكل ولتجنب المشكلة الذي حدثت في المثال السابق تكون كالتالي.

package lessontry;
import java.util.Scanner;
public class Lessontry {
    public static void main(String[] args) {
        Scanner s=new Scanner(System.in);
        try{
        int x1,x2,x3;
        x1=s.nextInt();
        x2=s.nextInt();
        x3=x1/x2;
        System.out.println(x3);
        }catch(Exception e) {System.out.println(e.getMessage());}
    }
}

بهذه الطريقة لقد تفادينا المشكلة و عندما يدخل المستخدم قيمة قسمة على 0 سوف تظهر له رسالة بأنه أنت قمت بإدخال قيمة خاطئة و هي 0 أي لا يتم القسمة على صفر في عالم الرياضيات.

أي كود تتوقع المستخدم أن يقع به في بعض الأحيان ضعه بين try و catch لتجنب المشاكل

 

كيفية وضع اكثر من catch في البرنامج جافا؟

في بعض الأحيان البرنامج يواجه اكثر من عملية خطأ, حينها يجب علينا أن نتصيد كل الأخطاء لضمان عدم حدوث أي خطأ في البرنامج.

try {
 اوامر البرنامج الذي قد تحدث بها أخطاء
}
catch (Exception1 e1){
  الأوامر الذي تتنفذ في حال التقاط استئناء
}
catch (Exception2 e2){
  الأوامر الذي تتنفذ في حال التقاط استئناء
}

نستطيع وضع الكثير من جمل catch في البرنامج حسب عدد الأخطاء التي نتوقع حدوثها.


Tags:
Muhammad Alush

Muhammad Alush

إسمي محمد تركي العلوش من سورية من ريف حلب الشرقي 1994, محب للتقنية و التعلم الذاتي, و جميع خبراتي تعلمتها ذاتياً, و اللغات البرمجية التي أتقنها هي html, css, javascript, php, c, python بالإضافة إلى حبي الكبير لمجال الشبكات.

موقعي programmer-tech.com