استخدام Java للتعامل مع عدة استثناءات وإعادة طرح الاستثناء

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

التقاط استثناءات متعددة في جافا

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

catch (IOException ex) {
     logger.error(ex);
     throw new MyException(ex.getMessage());
catch (SQLException ex) {
     logger.error(ex);
     throw new MyException(ex.getMessage());
}

في Java 7 ، يمكننا التقاط هذين الاستثناءين في كتلة catch واحدة كما يلي:

catch(IOException | SQLException ex){
     logger.error(ex);
     throw new MyException(ex.getMessage());
}

إذا كانت كتلة catch تتعامل مع استثناءات متعددة ، يمكنك فصلها باستخدام الخط العمودي (|) وفي هذه الحالة ، يكون معلم المستثنى (ex) نهائيًا ، لذا لا يمكنك تغييره. يكون الشيفرة البايتية التي تم إنشاءها بهذه الميزة أصغر وتقلل من تكرار الكود.

إعادة طرح الاستثناء في جافا

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

package com.journaldev.util;

public class Java7MultipleExceptions {

	public static void main(String[] args) {
		try{
			rethrow("abc");
		}catch(FirstException | SecondException | ThirdException e){
			//ستتسبب الشيفرة أدناه في إثارة استثناء في وقت الترجمة نظرًا لأن e هو final
			//e = new Exception();
			System.out.println(e.getMessage());
		}
	}

	static void rethrow(String s) throws FirstException, SecondException,
			ThirdException {
		try {
			if (s.equals("First"))
				throw new FirstException("First");
			else if (s.equals("Second"))
				throw new SecondException("Second");
			else
				throw new ThirdException("Third");
		} catch (Exception e) {
			//ستعطل الشيفرة أدناه ميزة التحقق من نوع الاستثناء المحسنة لـ Java 7
			// e=new ThirdException();
			throw e;
		}
	}

	static class FirstException extends Exception {

		public FirstException(String msg) {
			super(msg);
		}
	}

	static class SecondException extends Exception {

		public SecondException(String msg) {
			super(msg);
		}
	}

	static class ThirdException extends Exception {

		public ThirdException(String msg) {
			super(msg);
		}
	}

}

كما يمكنك رؤية في طريقة rethrow، يتم التقاط الاستثناء في كتلة الامساك ولكنه ليس جزءًا من جملة الـ throws. يقوم مترجم Java 7 بتحليل محاولة الكاملة للتحقق من أنواع الاستثناء التي يتم إثارتها ثم إعادة إلقائها من كتلة الامساك. يرجى ملاحظة أن هذا التحليل يتم تعطيله إذا قمت بتغيير وسيط كتلة الامساك. قراءة إضافية: معالجة الاستثناء في جافا.

Source:
https://www.digitalocean.com/community/tutorials/java-catch-multiple-exceptions-rethrow-exception