/ / Java: الاستثناءات والتعامل معها

جافا: الاستثناءات ومعالجتها

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

عندما قد تحتاج إلى التعامل مع الاستثناءات

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

استثناءات جافا

التعامل مع استثناءات جافا

ما ينبغي النظر؟ لغة Java لها وظيفة معالجة الاستثناء المضمنة الخاصة بها. بالطبع ، يتم القبض على نسبة كبيرة من الأخطاء في مرحلة التجميع ، عندما يقوم النظام تلقائيًا بالإبلاغ عن عدم إمكانية استخدامه بعد ذلك. ولكن هناك أيضا مثل هذا النوع من الاستثناءات ، والذي ينشأ أثناء تشغيل البرنامج. يجب أن يكون المطور قادرًا على توقع ذلك وتصميم الشفرة بطريقة لا تتسبب في حدوث خطأ ، ولكن يعاملها بطريقة خاصة أو يمرر التحكم إلى فرع آخر.

في Java ، يتم فرض مثل هذا الاستثناء من قبل المحول البرمجي ، لذلك تُعرف المشكلات النموذجية ويكون لها نظام التنفيذ القياسي الخاص بها.

استثناءات نموذجية

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

في Java ، تبدو آلية معالجة الأخطاء كما يلي:

  • يتم إنشاء كائن استبعاد على الكومة ، تمامًا مثل أي كائن آخر ؛
  • توقف المسار الطبيعي للبرنامج.
  • يحاول آلية الاستثناء البحث عن طريقة بديلة لمتابعة التعليمات البرمجية؛
  • العثور على مكان التنفيذ الآمن للبرنامج في المعالج ، سيتم استعادة العمل ، أو سيتم تنفيذ استثناء بطريقة خاصة.

أبسط مثال على إنشاء خطأ قد يبدو كالتالي:

إذا (a == فارغة)

رمي جديد NullPointerException () ؛

هنا يتم فحص المتغير a للتهيئة ،أي لا يساوي مرجع فارغة. في حالة حدوث هذه الحالة وتحتاج إلى معالجة خاصة ، يتم طرح استثناء بإلقاء NullPointerException () جديد.

بعض التفاصيل حول الكلمات الرئيسية

عند التعامل مع الاستثناءات ، يجب عليك غالبًا استخدام الكلمات الأساسية لـ Java للإشارة إلى إجراء. في لغة البرمجة هذه يوجد خمسة منها:

  • محاولة. لقد تمت مصادفة هذه الكلمة الرئيسية بالفعل وتعني أنها ستنتقل إلى قسم الشفرة الذي يمكنه طرح استثناء. يقتصر الحظر على الأقواس المتعرجة {}.
  • الصيد. فإنه ربط نوع الاستثناء المناسب ومعالجتها بشكل مناسب.
  • وأخيرا. هذه الكلمة الأساسية اختيارية وتعمل على تنفيذ جزء من التعليمات البرمجية الضرورية في أي حال ، حتى إذا تم استبعاد أي استثناء. يضاف مباشرة بعد كتلة المحاولة.
  • رمي - يسمح لك بإنشاء استثناءات جافا في أي مكان في الكود.
  • الرماة هي الكلمة الرئيسيةتوقيع الطريقة. هذا يعني أن التعليمة البرمجية اللاحقة يمكنها التخلص من استثناء Java من النوع المحدد. مثل هذه العلامة بمثابة إشارة للمطورين ، ما تحتاج إلى تذكر - قد لا تعمل الطريقة كما هو متوقع.

قبض مع المحاولة

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

في Java ، يتم التفاف الكود في قالب تجريبي خاص ،في غضونه يمكن طرح استثناء. وبالتالي ، فإنه يضع عدة مواقف غير متوقعة في وقت واحد ، والتي سيتم القبض عليها في مكان واحد ، دون الزحف على طول الرمز.

تشبه الشفرة الأكثر شيوعًا مع كتلة المعالجة ما يلي:

حاول {

// سيحدد هذا الرمز الذي يمكنه طرح استثناء

} catch (Exception_Type_1 identifier_1) {

// هنا تتم معالجة الاستثناء ، وفقًا لنوعه وشروطه ؛

} catch (Extraction_type_2 identifier_2) {

// هنا تتم معالجة الاستثناء ، وفقًا لنوعه وشروطه ؛

}

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

أخيرا

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

التعامل مع استثناء جافا

في هذا القسم هناك عدة كتلالصيد مع طرق اخترعت اصطياد الاستثناءات. على سبيل المثال ، ينشئ التعليمة البرمجية الموجودة في المحاولة حالة غير متوقعة من نوع Cold. ثم سيتم عرض التعبير "اشتعلت البرد!" و "هل هذا شيء يهتف عنه؟" في وحدة التحكم. وهذا هو ، يتم تنفيذ كتلة أخيرا في أي حال.

في الواقع ، هناك طريقة لتجنب تشغيل في النهاية. وهو متصل بإنهاء الجهاز الظاهري. اكتشف كيف يمكن القيام بذلك على الإنترنت.

الكلمة رمي

رمي يلقي استثناء. يبدو بناء الجملة على النحو التالي:

رمي NewException ()؛

هنا يتم إنشاء استثناء جديد مع النوعNewException (). كنوع ، يمكنك استخدام الفئات المضمنة بالفعل في مكتبات Java القياسية وتحديدها مسبقًا بواسطة مطور الإنتاج الخاص بك.

يتم تضمين مثل هذا البناء في وصف بعض الطرق ، والتي يجب أن يتم استدعائها ضمن كتلة المحاولة ، حتى تكون قادرة على اعتراضها.

يلقي كلمة

ماذا تفعل إذا كانت هناك مشكلة في عملية التطويرحالة حيث يمكن لطريقة ما رمي استثناء ، ولكن لا يمكن التعامل معها بشكل صحيح. للقيام بذلك ، يحدد توقيع الطريقة كلمة throws ونوع الاستثناء المحتمل.

هذا التصنيف هو نوع من الفهرسة لـالمطورين العميل أن الأسلوب غير قادر على معالجة الاستثناء الخاص به. بالإضافة إلى ذلك ، إذا كان نوع الخطأ قابلاً للتحقق ، فسيحدد المحول البرمجي هذا بوضوح.

حاول مع الموارد

في الإصدار 7 من Java ، قام المطورون بتضمين مثل هذا الابتكار المهم مثل معالجة كتلة المحاولة بالموارد.

العديد من الكائنات التي تم إنشاؤها في جاوة ، بعديجب إغلاق الاستخدام لحفظ الموارد. في السابق ، كان عليك حساب وإيقاف مثل هذه الحالات يدويًا. الآن لديهم واجهة AutoClosable. يساعد على إغلاق الكائنات المستخدمة بالفعل تلقائيًا ، ووضعها في كتلة المحاولة. وبفضل هذا النهج ، أصبح من الأسهل كتابة الرمز ، وزادت قراءته بشكل ملحوظ.

فئات استثناء Java مخصصة

المبدعين من لغة البرمجة الموصوفةأخذ بعين الاعتبار العديد من الجوانب عند تصميم أنواع الحالات غير المتوقعة. ومع ذلك ، لا يمكن منع جميع المتغيرات من نتائج الأحداث ، وبالتالي في جافا تتحقق إمكانية تحديد الاستثناءات الخاصة بهم ، ومناسبة تماما لاحتياجات رمز معين.

أبسط طريقة لإنشاء هي أن ترث من الكائن الأكثر ملاءمة للسياق.

قائمة استبعاد جافا

هنا كان هناك ميراث من استثناء ،الطبقة ، والتي تستخدم لتحديد الاستثناءات الخاصة بك. في MyException ، هناك نوعان من المنشئات - واحد بشكل افتراضي ، والثاني - مع وسيطة من نوع msg سلسلة.

ثم في تطبيق FullConstructors العامةهي الطريقة التي يحتوي توقيعها على رميات MyException. تعني هذه الكلمة الأساسية أنه يمكن أن يؤدي f إلى استثناء Java من النوع MyException. علاوة على ذلك ، في نص الأسلوب ، يتم إخراج معلومات النص إلى وحدة التحكم والتوليد الفعلي لـ MyException ، عبر الرمية.

الطريقة الثانية تختلف قليلاً عن الطريقة الأولى ،أنه عند طرح استثناء ، يتم تمرير معلمة سلسلة إليه ، والتي ستنعكس في وحدة التحكم عند التقاطها. بشكل عام ، سترى أن f () و g () موضوعة في كتلة try ، ويتم تعيين الكلمة الأساسية catch لالتقاط MyException. نتيجة المعالجة هو إخراج رسالة الخطأ إلى وحدة التحكم:

خلق استثناءات جافا

وبالتالي ، كان من الممكن إضافة استثناءات إلى Java ، تم إنشاؤها يدويًا.

هندسة الاستثناء

مثل جميع الكائنات في Java ، الاستثناءات أيضاهي موروثة ولها هيكل هرمي. العنصر الجذري لجميع الأخطاء التي يتم طرحها في لغة البرمجة هذه هو java.lang.Throwable class. يرث نوعين - خطأ واستثناء.

 رمي استثناء جافا

خطأ - إخطار من الأخطاء الخطيرة ويمثل استثناءات جافا غير محددة. ويحدث اعتراض هذه البيانات ومعالجتها في معظم الحالات في مرحلة التطوير ولا يلزم تضمينها في رمز الطلب النهائي.

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

استثناءات متكررة

في جافا ، يتم استخدام الاستثناءات المذكورة أدناه في الغالب ، لذا من المفيد وصف كل منها بمزيد من التفاصيل:

  • ArithmeticException. وهذا يشمل الأخطاء المرتبطة بالعمليات الحسابية. المثال الأكثر لفتا للانتباه هو التقسيم صفر.
  • ArrayIndexOutOfBoundsException - استدعاء لرقم عنصر من صفيف يتجاوز طوله الإجمالي.
  • ArrayStoreException - محاولة لتعيين نوع غير متوافق لعنصر في صفيف.
  • ClassCastException - محاولة لإدخال نوع إلى آخر بشكل غير صحيح.
  • IllegalArgumentException - باستخدام وسيطة غير صالحة في استدعاء الأسلوب.
  • NegativeArraySizeException - استثناء عند إنشاء صفيف من الحجم السلبي.
  • NullPointerException - استخدام غير صحيح من مرجع فارغة.
  • NumberFormatException - يحدث عندما يتم تحويل السلسلة إلى رقم بشكل غير صحيح.
  • UnsupportedOperationException - العملية غير مدعومة.

هذه الأمثلة هي أنواع استثناء جافا غير محددة. وهذا هو ما يبدو الناس وكأنهم:

  • ClassNotFoundException - لم يتم اكتشاف الفئة.
  • IllegalAcccessException - تقييد الوصول إلى الفئة.
  • InterruptedException - انقطاع تدفق العمل.
  • NoSuchFieldException - الحقل المطلوب غير موجود.

تفسير الاستثناءات

التحدث عن الاستثناءات المتكررة التي تحتاجهالاحظ أن تفسيرها أثناء التطوير قد يساء فهمه. فيما يلي قائمة صغيرة تشرح بمزيد من التفصيل عندما قد تنشأ حالة غير متوقعة.

أنواع استثناء جافا

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

ArrayIndexOutOfBoundsException. لا يمكن أن يوجد أي برنامج بدون استخدام المصفوفات. وبالتالي ، يمكن أن تؤدي الإشارة المتكررة إلى حدوث أخطاء. يتم طرح استثناء عندما يحاول مطور للوصول إلى عنصر صفيف غير موجود في قائمة الفهرس. على سبيل المثال ، القيمة المطلوبة أكبر من الطول أو أقل من الصفر. في كثير من الأحيان يبدو كنتيجة لحقيقة أن العد في الصفيف يبدأ من الصفر.

النتائج

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

 استثناءات الخطأ جافا

بالطبع ، في أكثر أو أقل برامج بسيطة.لمراقبة حالات الطوارئ أسهل بكثير. ولكن في المجمعات الآلية الكبيرة التي تحتوي على مئات الآلاف من الخطوط ، يكون ذلك ممكنًا فقط نتيجة التصحيح الطويل والاختبار.

لاستثناءات جافا ، الأخطاء التي تنشأ فيبعض التطبيقات ، تقدم الشركات الفردية مكافآت عند العثور عليها من قبل المتحمسين. وتقديرًا خاصًا هي تلك التي تسبب انتهاكًا لسياسة الأمان الخاصة بحزمة البرامج.

</ p>>
اقرأ المزيد: