JavaRush /مدونة جافا /Random-AR /أهم 10 أسئلة حول الاستثناءات في جافا
raynn
مستوى
Нижний Новгород

أهم 10 أسئلة حول الاستثناءات في جافا

نشرت في المجموعة
توضح المقالة الأسئلة العشرة الأكثر شيوعًا حول الاستثناءات في Java. أهم 10 أسئلة حول الاستثناءات في Java - 1

1. يمكن التحقق منه وغير قابل للتحقق

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

2. أفضل طريقة للتعامل مع الاستثناءات

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

3. لماذا لا يمكن استخدام المتغيرات المحددة في المحاولة في الالتقاط أو في النهاية؟

في الجزء التالي من التعليمات البرمجية، لا يمكن استخدام السطر المعلن في كتلة المحاولة في كتلة الالتقاط. لن يتم تجميع هذا الرمز.
try {
	File file = new File("path");
	FileInputStream fis = new FileInputStream(file);
	String s = "inside";
} catch (FileNotFoundException e) {
	e.printStackTrace();
	System.out.println(s);
}
والسبب هو أنه ليس من المعروف بالضبط المكان الذي قد يتم فيه طرح الاستثناء في كتلة المحاولة. من الممكن أن يكون قد تم طرح الاستثناء قبل الإعلان عن الكائن. وهذا صحيح بالنسبة لهذا المثال.

4. لماذا يقوم Double.parseDouble(null) وInteger.parseInt(null) بطرح استثناءات مختلفة؟

هذا صحيح، إنهم يثيرون استثناءات مختلفة. هذه مشكلة JDK. لقد تم تصميمها ببساطة من قبل أشخاص مختلفين، ولا داعي للقلق كثيرًا بشأن ذلك.
Integer.parseInt(null);
// вызывает java.lang.NumberFormatException: null

Double.parseDouble(null);
// вызывает java.lang.NullPointerException

5. استثناءات وقت التشغيل الأساسية في Java

وهنا عدد قليل منهم:
IllegalArgumentException
ArrayIndexOutOfBoundsException
يمكن استخدامها في عبارة if عندما لا يتم استيفاء الشرط، كما هو الحال هنا:
if (obj == null) {
   throw new IllegalArgumentException("obj не может быть равно null");

6. هل من الممكن التقاط استثناءات متعددة في كتلة صيد واحدة؟

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

7. هل يمكن للمنشئ طرح استثناءات؟

الجواب نعم. المنشئ هو مجرد نوع خاص من الأساليب. هنا مثال على التعليمات البرمجية.

8. طرح الاستثناءات في الكتلة النهائية

من حيث المبدأ، يمكنك القيام بذلك بشكل قانوني تمامًا:
public static void main(String[] args) {
	File file1 = new File("path1");
	File file2 = new File("path2");
	try {

		FileInputStream fis = new FileInputStream(file1);
	} catch (FileNotFoundException e) {
		e.printStackTrace();
	} finally {
		try {
			FileInputStream fis = new FileInputStream(file2);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}
}
ولكن للحفاظ على سهولة قراءة التعليمات البرمجية، تحتاج إلى إعلان الكتلة المتداخلة try-catchكطريقة جديدة، وإدراج استدعاء لهذه الطريقة في الكتلة finally.
public static void main(String[] args) {
	File file1 = new File("path1");
	File file2 = new File("path2");
	try {

		FileInputStream fis = new FileInputStream(file1);
	} catch (FileNotFoundException e) {
		e.printStackTrace();
	} finally {
		methodThrowException();
	}
}

9. هل من الممكن استخدام الإرجاع في الكتلة النهائية؟

نعم يمكنك ذلك.

10. لماذا يتعامل المطورون مع الاستثناءات بهدوء؟

على سبيل المثال، غالبًا ما تظهر مثل هذه الأجزاء من التعليمات البرمجية. إذا كانت معالجة الاستثناءات المناسبة مهمة جدًا، فلماذا يستمر المطورون في كتابتها بهذه الطريقة؟
try {
     ...
} catch(Exception e) {
     e.printStackTrace();
}
من الأسهل تجاهلها. ولكن حتى لو تم ذلك في كثير من الأحيان، فهذا لا يعني أنه صحيح. الروابط:
  1. الاستثناءات التي لم يتم التحقق منها في Java
  2. جذر شجرة الاستثناءات الهرمية في Java
  3. أسئلة حول الاستثناءات في تدفق المكدس
المقالة الأصلية
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION