وتسمى الظاهرة غير الطبيعية لبرامج Java التي تعمل على تشغيل الأخطاء. وفقًا لطبيعتها ، يمكن تقسيمها إلى فئتين: خطأ (خطأ) واستثناء (استثناء) ؛ لديهم فئة الوالدين المشتركة (أيضًا فئة الوالدين ذات المستوى الأعلى لجميع الاستثناءات): قابلة للتسمية.
بنية فئة الاستثناء
خطأ
يتم إنشاء الخطأ بواسطة JVM والتخلي عنه دون معالجة ؛ عادةً ما لا ترتبط هذه الأخطاء بالرمز والعمليات التي تم تنفيذها ، وهي مشاكل خطيرة نسبيًا في الجهاز الظاهري ولا يمكن حلها بواسطة البرنامج نفسه (تشمل الأخطاء الشائعة حلقات ميتة ، وتسربات للذاكرة ، وما إلى ذلك).
الخطأ الشائع هو خطأ الجهاز الظاهري Java (VirtualMachineError). عندما لم يعد لدى JVM موارد الذاكرة المطلوبة لمواصلة العملية ، ستظهر OutofMemoryError. عند حدوث هذه الاستثناءات ، يختار الجهاز الظاهري Java (JVM) عمومًا إنهاء المواضيع.
استثناء
يتم استخدام الاستثناء ككائن ويتم تجاهله أو معالجته بواسطة برامج Java ؛ عادةً ما تكون أسباب الاستثناءات هي: الرمز أو رمز الاتصال غير صحيح ، وموارد نظام التشغيل غير متوفرة ، وتواجه مكتبة وقت تشغيل اللغة المشتركة حادثًا ؛
تنقسم الاستثناءات إلى استثناءات وقت التشغيل الناتجة عن الأجهزة الافتراضية (RunTimeException ، مثل المؤشرات الخالية ، وصفيف من الحدود) والاستثناءات غير المحددة الناتجة عن حوادث البرنامج (مثل IoException) ؛
استثناء وقت التشغيل: يمكن للبرنامج اختيار التقاط ومعالجة أو رميه مباشرة دون معالجة ؛ تشمل استثناءات وقت التشغيل الشائعة فيضان الخوارزمية (تجاوز نطاق التعبير العددي) ، القسمة هي الصفر ، فائض الذاكرة ، مؤشر فارغ ، معلمات غير صالحة ، إلخ. مثل هذه الاستثناءات هي أخطاء في البرمجة في البرنامج نفسه. يمكنك ضبط اتجاه تشغيل رمز الاستثناء للحفاظ على تشغيل البرنامج حتى ينتهي بشكل طبيعي ؛
استثناء غير محدد: تسمى استثناءات غير متوقعة لنوع RunTimeException الاستثناءات غير المحددة. من منظور بناء جملة البرنامج ، فهي استثناءات يجب معالجتها. إذا لم تتم معالجتها ، فلا يمكن تجميع البرنامج وإقراره ؛ تتضمن الاستثناءات الشائعة غير المحددة IoException ، مثل: لا يمكن العثور على ملفات الموارد ، وما إلى ذلك ، مما يعني أنه لا يمكن تنفيذ البرنامج بنجاح عند مواجهة موقف غير متوقع.
ملاحظة: يمكن معالجة الفرق بين الاستثناءات والأخطاء-الاستثناءات من قبل البرنامج نفسه ، ولكن لا يمكن التعامل مع الأخطاء.
استثناءات قابلة للتحقق وليس استثناءات قابلة للتحقق
يمكن تقسيم استثناءات Java (ErrorandExceptions) إلى فئتين أخريين وفقًا لما إذا كان يمكن تجميع البرنامج وإقراره: استثناءات فحص واستثناءات غير محددة.
يمكن التحقق من الاستثناءات
يمكن التحقق من الاستثناء: المقابلة للاستثناءات غير المحددة ، يمكن للمترجم التحقق من الأخطاء المتوقعة عند تجميع البرنامج. يجب التعامل مع هذا الاستثناء. هناك طريقتان للتعامل معها: إن عبارة Try-Catch يمسك بالاستثناء أو يعلن جملة TROWS إلقاء استثناء ، ويتم الإعلان عن نوع الاستثناء خارج رأس الطريقة (باستخدام استثناء رميات) ويمكن للمتصل اختيار التعامل مع الاستثناء المستلم.
عند الحديث عن هاتين الطريقتين للتعامل ، نحتاج إلى التحدث عن الكلمات الرئيسية الخمسة لمعالجة استثناءات Java: حاول ، وأخيراً ، رميات ، رمي
1. استخدم عبارة Try-Catch لمعالجة التقاط (لا يلزم الإعلان عن رأس الطريقة)
الكتل الثلاثة من المحاولة ، والقبض ، وأخيرا لا يمكن أن تظهر وحدها. يمكن دمج الثلاثة في المحاولة/المحاولة-المحاولة/المحاولة.
يمكن أن يكون هناك العديد من كتل الصيد ، وفي هذا الوقت ، لا يمكن مطابقة أحد رموز كتلة الصيد إلا من أعلى إلى أسفل ؛
أخيرًا ، لا يمكن الوصول إلى متغير واحد على الأكثر لبعضها البعض في كتل البيان الثلاثة.
في هذا القسم ، يتم استخدام مجموعة المحاولة للتعامل مع الاستثناء القابل للتحقق ، ورمي الاستثناء لأعلى ، مثال:
Public XmlReaderHdu (String Xmlfile) {super () ؛ this.xmlfile = xmlfile ؛ this.filename = staticConfig.umlPathprefixhdu ؛ حاول {saxreader reader = new saxreader () ؛ docum dom = reader.read (xmlfile) ؛ root = dom.getrootlement () ؛} catch (استثناء e1) {handle1 ...}}2. استخدم جملة رميات لإعلان رمي (إعلان رمي نوع الاستثناء في الرأس خارج هيكل الطريقة: استخدم رميات لرمي الاستثناء)
أولاً ، استخدم رميًا داخل طريقة الجسم لرمي استثناء ؛
بعد ذلك ، يتم الإعلان عن الطريقة خارج الرأس ويرمي الاستثناء الذي تم إلقاؤه في الداخل باستخدام رميات ؛
مثال 1: تجربت التجربة يلقي استثناء
Public XmlReaderHdu (String Xmlfile) يلقي الاستثناء {super () ؛ this.xmlfile = xmlfile ؛ this.filename = staticConfig.umlpathprefixhdu ؛ حاول {saxreader reader = new saxreader () ؛ document dom = reader.read (xmlfile) ؛ root = dom.getrootlement () ؛} catch (استثناء e1) {رمي استثناء جديد (e1) ؛}مثال 2: رمي رمي الاستثناء المخصص
قائمة خاصة <Usecase> readUcinFormation () يلقي الاستثناء {if (e1.hascontent ()) {if (e1.Element ("name"). getText (). يساوي ("precondition")) خطأ")؛}}}غير قادر على التحقق من الاستثناءات
استثناءات لا يمكن تحديدها: تتضمن خطأ خطأ واستثناء وقت التشغيل RunTimeException
يمكن تمرير استثناءات وقت التشغيل أثناء تجميع البرنامج. لا يمكن اكتشافه من خلال بناء الجملة الثابتة التي قد ترمي الاستثناءات. فقط عندما يتم العثور على الاستثناء (أي ، اعتمادًا على حالة وقت التشغيل ، يتم تحديده بواسطة حالة وقت التشغيل) ؛
يمكنك اختيار التقاط المعالجة أو العرض (mustbecaughtordeclearedtobethrown). هذه الاستثناءات ناتجة بشكل عام بسبب أخطاء منطق البرنامج ، ويجب أن تتجنب البرامج مثل هذه الاستثناءات قدر الإمكان من منظور منطقي.
لخص
ما سبق هو كل شيء عن تحليل المعرفة الأساسية لاستثناءات Java في هذه المقالة ، وآمل أن يكون مفيدًا للجميع. يمكن للأصدقاء المهتمين الاستمرار في الرجوع إلى الموضوعات الأخرى ذات الصلة على هذا الموقع. إذا كانت هناك أي أوجه قصور ، فيرجى ترك رسالة لإشارةها. شكرا لك يا أصدقائك لدعمكم لهذا الموقع!