English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
الاستثناءات هي المشاكل التي تحدث أثناء تنفيذ البرنامج (الخطأ في الوقت التشغيل). لنفهم الهدف من خلال النظر في ذلك بطريقة مختلفة.
عادةً، عند تجميع البرنامج، إذا لم يتم إنشاء ملف .class عند التجميع، فإن الملف هو ملف قابل للتنفيذ في Java، ويجب أن يتم تنفيذه بنجاح في كل مرة يتم تنفيذ ملف .class هذا لتنفيذ كل سطر في البرنامج دون مشاكل. ولكن، في بعض الحالات الخاصة، يواجه JVM بعض المواقف المبهمة عند تنفيذ البرنامج، حيث لا يعرف كيفية التصرف.
هذه بعض الأمثلة على الحلول-
إذا كان حجم مصفوفتك 10، فإن سطرًا في الكود يحاول الوصول إلى العنصر الـ 11 في المصفوفة.
إذا حاولت تقسيم الرقم على الصفر (النتيجة هي لا نهائية، ولا يمكن JVM فهم كيفية حسابها).
عادةً، عندما يحدث استثناء، ينهي البرنامج بشكل مفاجئ في السطر الذي يسبب الاستثناء، مما يؤدي إلى عدم تنفيذ بقية البرنامج. لتجنب هذا، تحتاج إلى معالجة الاستثناءات.
لمعالجة الاستثناءات، يقدم Java ميكانيكية try-catch.
يتم وضع جسم try / catch حول الكود الذي يمكن أن يحدث فيه استثناء. يُدعى الكود داخل جسم try / catch بالكود المحمي.
try { // Protected code } catch (ExceptionName e1) { // Catch block }
عندما يتم إطلاق استثناء في جسم try، ينتهي JVM من تفاصيل الاستثناء بدلاً من إنهاء البرنامج، ويتم تخزين تفاصيل الاستثناء في استديو الاستثناء ويتم الانتقال إلى جسم catch.
تتضمن جملة catch إعلان نوع الاستثناء الذي تريد إلتقاطه. إذا حدث استثناء في جسم try، يتم نقل الاستثناء إلى جسم catch التالي.
إذا تم ذكر نوع الاستثناء الذي يحدث في جسم catch، فإن طريقة نقل الاستثناء إلى جسم catch تشبه طريقة نقل المعلمات إلى معلمات الطريقة.
import java.io.File; import java.io.FileInputStream; public class Test { public static void main(String args[]){ System.out.println("Hello"); try{ File file = new File("my_file"); FileInputStream fis = new FileInputStream(file); } System.out.println("لم يتم العثور على مسار الملف المحدد"); } } }
نتيجة الإخراج
لم يتم العثور على مسار الملف المحدد
قوس finally يقع بعد قوس try أو catch. يتم تنفيذ قوس finaly دائمًا، سواء تم إلقاء استثنائي أو لا.
public class ExcepTest { public static void main(String args[]) { int a[] = new int[2]; try { System.out.println("وصول العنصر الثالث: " + a[3]); } System.out.println("استثنائي تم إلقاؤه: " + e); } a[0] = 6; System.out.println("قيمة العنصر الأول: " + a[0]); System.out.println("تعبير finally يتم تنفيذه"); } } }
نتيجة الإخراج
استثنائي تم إلقاؤه: java.lang.ArrayIndexOutOfBoundsException: 3 قيمة العنصر الأول: 6 تعبير finally يتم تنفيذه