ב-Java 7, קטע התפסה שופר כך שהוא יכול לטפל במספר רב של חריגות בבלוק יחיד. אם אתה תופס מספר חריגות ויש להם קוד דומה, אז בשימוש בתכונה זו יפחית מכך את השכפול בקוד. בוא נבין את יכולות תפיסת החריגות ב-Java עם דוגמה.
תפיסת חריגות מרובות ב-Java
לפני 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(IOException | SQLException ex){
logger.error(ex);
throw new MyException(ex.getMessage());
}
אם בלוק תפיסה מטפל במספר חריגות, ניתן להפריד אותן באמצעות קו אנכי (|) ובמקרה זה, הפרמטר של החריגה (ex) הוא קבוע, ולכן אין אפשרות לשנות אותו. הבייט קוד הנוצר על ידי תכונה זו קטן יותר ומפחית את השכפול בקוד.
Java הזרקת חריגה מחדש
שדרוג נוסף נעשה בניתוח המהדר של חריגות שמוזרקות מחדש. זריקת חריגה מחדש ב-Java מאפשרת לך לציין סוגי חריגות יותר ספציפיים בקלוז throws של הכרזת שיטה. בוא נראה זאת בדוגמה קטנה:
package com.journaldev.util;
public class Java7MultipleExceptions {
public static void main(String[] args) {
try{
rethrow("abc");
}catch(FirstException | SecondException | ThirdException e){
//השורה למטה תזרוק חריגת זמן קומפילציה מאחר ו-e הוא קבוע
//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
, לבלוק catch יש תפקיד לכוד חריגה, אך אין החריגה חלק מ-Clause ה- throws. מהדוק Java 7 מנתחת את הבלוק try לגבי סוגי החריגות שנזרקות ומכלילה מחדש מהבלוק catch. שים לב שהניתוח נוטרל אם תשנה את פרמטר בלוק catch. קרא נוסף: Exception Handling in Java.
Source:
https://www.digitalocean.com/community/tutorials/java-catch-multiple-exceptions-rethrow-exception