سؤال

أحاول معرفة المزيد عن جافا الأساسية وأنواع مختلفة من الألغام، هل يمكن لشخص ما اسمحوا لي أن أعرف الاختلافات بين الاستثناءات والأخطاء؟

هل كانت مفيدة؟

المحلول

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

خطأ هو فئة فرعية من الرمانية التي تشير إلى مشاكل خطيرة لا ينبغي أن يحاول تطبيق معقول التقاطه. معظم هذه الأخطاء ظروف غير طبيعية.

انظر إلى عدد قليل من الفئات الفرعية من Error, ، أخذ بعض تعليقات جافادوك الخاصة بهم:

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

هناك حقا ثلاث فئات فرعية مهمة من Throwable:

  • Error - حدث شيء شديد بما فيه الكفاية على أن معظم التطبيقات يجب أن تحطمها بدلا من محاولة التعامل مع المشكلة،
  • استثناء غير محدد (ويعرف أيضا باسم RuntimeException) - في كثير من الأحيان خطأ برمجة مثل NullPointerException أو حجة غير قانونية. يمكن أن تتعامل التطبيقات في بعض الأحيان أو التعافي من هذا Throwable الفئة - أو على الأقل قبض عليه في الخيط run() الطريقة، سجل الشكوى، ومتابعة التشغيل.
  • تم التحقق من الاستثناء (ويعرف أيضا باسم كل شيء آخر) - من المتوقع أن تكون التطبيقات قادرة على التقاط وشيء ما مع الراحة، مثل FileNotFoundException و TimeoutException...

نصائح أخرى

هذه الشريحة عرض التسلسل الهرمي استثناء جافا بواسطة @ جورجيوس-جوسيوس تفسر بالتيقام الاختلافات بين الأخطاء والاستثناءات في جافا.

Java Exception Hierarchy

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

مثال: outofmemoryError. - ليس كثيرا يمكنك القيام به كبرنامجك لم يعد بإمكانك تشغيله.

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

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

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

الشمس يضعها بشكل أفضل:

خطأ هو فئة فرعية من الرمانية التي تشير إلى مشاكل خطيرة لا ينبغي أن يحاول تطبيق معقول التقاطه.

أخطاء -

  1. ErrorS في جافا من النوع java.lang.Error.
  2. جميع الأخطاء في Java نوع غير محدد.
  3. Errorيحدث في وقت التشغيل. لن يعرفوا الترجمة.
  4. من المستحيل التعافي من الأخطاء.
  5. Errorغالبا ما تسببها البيئة في أي تطبيق قيد التشغيل.
  6. أمثلة : java.lang.StackOverflowError, java.lang.OutOfMemoryError

استثناءات -

  1. ExceptionS في جافا من النوع java.lang.Exception.
  2. Exceptionقم بتضمين كلا من النوع الذي تم التحقق منه بالإضافة إلى نوع غير محدد.
  3. من المعروف أن الاستثناءات المحددة للمترجم حيث لا يعرف استثناءات غير محددة بالمترجم لأنها تحدث في وقت التشغيل.
  4. يمكنك التعافي من الاستثناءات عن طريق التعامل معها من خلال try-catch كتل.
  5. Exceptionناتجة أساسا عن التطبيق نفسه.
  6. أمثلة : استبصارات فحص: SQLException, IOException
    استثناءات غير محددة: ArrayIndexOutOfBoundException, ClassCastException, NullPointerException

قراءة متعمقة : http://javaconceptoftheday.com/difference-between-error-vs-exception-in-java/ http://javaconceptoftheday.com/wp-content/uploads/2015/04/ErrorVsException.png

وصف الوصف Error الطبقة واضحة تماما:

أ Error هي فرعية من Throwableوهذا يشير إلى مشاكل خطيرة في أن تطبيق معقول يجب ألا يحاول التقاطه. معظم هذه الأخطاء ظروف غير طبيعية. ال ThreadDeathخطأ، على الرغم من حالة "طبيعية"، هي أيضا فرعية من Error لأن معظم التطبيقات يجب ألا تحاول اللحاق بها.

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

استشهد من جافا الخاصة توثيق الفصل Error.

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

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

هناك العديد من أوجه التشابه والاختلافات بين الطبقات java.lang.Exception و java.lang.Error.

التشابه:

  • أولا - كلا الفصلين يمتد java.lang.Throwable وكما يؤدي نتيجة العديد من الأساليب الشائعة لاستخدامها عند التعامل مع الأخطاء مثل: getMessage, getStackTrace, printStackTrace وما إلى ذلك وهلم جرا.

  • ثانيا، باعتبارها فرعية من java.lang.Throwable كلاهما يرث بعد الخصائص التالية:

    • قابلة للإزالة نفسها وأي من الفئات الفرعية (بما في ذلك java.lang.Error) يمكن إعلانها في قائمة استثناءات الأسلوب باستخدام throws الكلمة الرئيسية. هذا الإعلان مطلوب فقط ل java.lang.Exception والفئات الفرعية، ل java.lang.Throwable, java.lang.Error و java.lang.RuntimeException وفئات الفئات الفرعية لها اختيارية.

    • فقط java.lang.Throwable وسماح لها الفئات الفرعية المستخدمة في catch بند.

    • فقط java.lang.Throwable ويمكن استخدام الفئات الفرعية مع الكلمة الرئيسية - throw.

الاستنتاج من هذه الخاصية يتابع كليهما java.lang.Error و java.lang.Exception يمكن الإعلان عنها في رأس الطريقة، يمكن أن يكون في catch جملة، يمكن استخدامها مع الكلمة الرئيسية throw.

اختلافات:

  • الأول - الفرق المفاهيمي: java.lang.Error تم تصميمه ليتم إلقاؤه بواسطة JVM ويشير إلى مشاكل خطيرة وتهدف إلى إيقاف تنفيذ البرنامج بدلا من الوقوع (ولكن من الممكن أما بالنسبة لأي شيء آخر java.lang.Throwable خليفة).

    مرور من جافادوك الوصف java.lang.Error:

    ... يشير إلى مشاكل خطيرة في أن تطبيق معقول يجب ألا يحاول التقاطه.

    في المقابل java.lang.Exception تم تصميمه لتمثيل الأخطاء المتوقعة ويمكن التعامل معها بواسطة مبرمج دون إنهاء تنفيذ البرنامج.

    مرور من جافادوك الوصف java.lang.Exception:

    ... يشير إلى الشروط التي قد ترغب فيها تطبيق معقول في التقاطه.

  • الفرق الثاني بين java.lang.Error و java.lang.Exception التي تعتبر لأول مرة لم يتم التحقق منه استثناء لفحص استثناء وقت الترجمة. كما رمي رمز النتيجة java.lang.Error أو لا تتطلب الفئات الفرعية الخاصة بها إعلان هذا الخطأ في رأس الطريقة. أثناء رمي java.lang.Exception الإعلان المطلوب في رأس الطريقة.

القابلة للرمي وتخليص الطبقة الخلف (الخصائص والأساليب حذفت).enter image description here

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

مثال:

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

إليك ملخص جيد جدا من Java API ما يمثل الخطأ والاستثناء:

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

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

Otoh، للحصول على استثناءات، يقول جافا أبى:

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

الناجمة أساسا الناجمة عن البيئة في أي تطبيق قيد التشغيل. على سبيل المثال، يحدث outofmemoryError عندما ينفد JVM من الذاكرة أو يحدث contackoverflowerror عندما يفيض المكدس.

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

مصدر : الفرق بين استثناء الخطأ مقابل Java

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top