ב-Java טיפול בחריגים הוא אחד האמצעים היעילים לטיפול בשגיאות זמן ריצה כך שניתן יהיה לשמר את הזרימה הרגילה של האפליקציה. הוא מטפל בשגיאות זמן ריצה כגון NullPointerException ArrayIndexOutOfBoundsException וכו'. כדי לטפל בשגיאות אלו בצורה יעילה Java מספקת שתי מילות מפתח זרוק וזורק.
זריקת ג'אווה
מילת המפתח זריקה ב-Java משמשת כדי לזרוק במפורש חריגה משיטה או כל בלוק קוד. אנחנו יכולים לזרוק חריג מסומן או לא מסומן. מילת המפתח זריקה משמשת בעיקר להוצאת חריגים מותאמים אישית.
תַחבִּיר:
לִזרוֹק דוּגמָה
כאשר מופע הוא אובייקט מסוג Throwable (או תת המחלקות שלו כגון Exception).
דוּגמָה:
throw new ArithmeticException('/ by zero');
אבל חריג זה, כלומר מופע חייב להיות מסוג ניתן לזרוק או תת מחלקה של ניתן לזרוק .
זרימת הביצוע של התוכנית נעצרת מיד לאחר ביצוע הצהרת throw והסגירה הקרובה ביותר לְנַסוֹת בלוק נבדק כדי לראות אם יש לו א לִתְפּוֹס הצהרה התואמת את סוג החריגה. אם הוא מוצא התאמה נשלטת מועבר לאותה משפט, אחרת המצורף הבא לְנַסוֹת בלוק מסומן וכן הלאה. אם אין התאמה לִתְפּוֹס נמצא אז מטפל החריגים המוגדר כברירת מחדל יעצור את התוכנית.
מערך אובייקטים java
דוּגמָה: דוגמה זו מדגימה היכן חריג נזרק נתפס ונזרק מחדש בתוך שיטה.
Javaclass Geeks { static void fun() { try { throw new NullPointerException('demo'); } catch (NullPointerException e) { System.out.println('Caught inside fun().'); throw e; // rethrowing the exception } } public static void main(String args[]) { try { fun(); } catch (NullPointerException e) { System.out.println('Caught in main.'); } } }
תְפוּקָה
Caught inside fun(). Caught in main.
הֶסבֵּר: הדוגמה שלמעלה מדגימה את השימוש במילת המפתח throw כדי לזרוק במפורש NullPointerException. החריג נתפס בתוך כֵּיף() שיטת ומושלך מחדש למקום שבו הוא נתפס אז בשיטת main() .
דוּגמָה: דוגמה זו מדגימה חריג אריתמטי.
Java// Throwing an arithmetic exception class Geeks { public static void main(String[] args){ int numerator = 1; int denominator = 0; if (denominator == 0) { // Manually throw an ArithmeticException throw new ArithmeticException('Cannot divide by zero'); } else { System.out.println(numerator / denominator); } } }
תְפוּקָה:
Hangup (SIGHUP)
Exception in thread 'main' java.lang.ArithmeticException: Cannot divide by zero
at Geeks.main(Geeks.java:9)
הֶסבֵּר: הדוגמה שלמעלה מדגימה חריגה באמצעות זריקה שבה נזרק אריתמטית חריגה במפורש עקב חלוקה באפס.
ג'אווה זורק
זורק היא מילת מפתח ב-Java המשמשת בחתימה של שיטה כדי לציין ששיטה זו עלולה לגרום לאחד מהחריגים מהסוג המפורטים. המתקשר לשיטות אלו צריך לטפל בחריג באמצעות בלוק של try-catch.
תַחבִּיר:
סוג method_name(parameters) זורק exception_list
כאשר exception_list היא רשימה מופרדת בפסיק של כל החריגים ששיטה עשויה לזרוק.
בתוכנית אם יש סיכוי להעלות חריג אז המהדר תמיד מזהיר אותנו על כך ועלינו לטפל בחריג שנבדק אחרת נקבל שגיאת זמן קומפילציה האומרת חריג לא מדווח XXX חייב להיתפס או להכריז לזרוק. כדי למנוע שגיאת זמן קומפילציה זו, אנו יכולים לטפל בחריג בשתי דרכים:
- על ידי שימוש ב- try catch
- על ידי שימוש ב זורק מילת מפתח
אנו יכולים להשתמש במילת המפתח throws כדי להאציל את האחריות לטיפול בחריגים למתקשר (יכול להיות שזו שיטה או JVM) ואז שיטת המתקשר אחראית לטפל בחריג זה.
דוגמה 1: חריגה ללא טיפול
Javaclass Geeks { public static void main(String[] args) { Thread.sleep(10000); System.out.println('Hello Geeks'); } }
תְפוּקָה:
כפתור מרכז css
error: unreported exception InterruptedException; must be caught or declared to be thrownהֶסבֵּר: בתוכנית לעיל אנו מקבלים שגיאת זמן קומפילציה מכיוון שיש סיכוי לחריגה אם השרשור הראשי הולך לישון שרשורים אחרים מקבלים את ההזדמנות להפעיל את השיטה main() שתגרום ל-InterruptedException.
דוגמה 2: שימוש throws לטפל בחריגים
class Geeks { public static void main(String[] args) throws InterruptedException { Thread.sleep(10000); System.out.println('Hello Geeks'); } }
תְפוּקָה:
Hello Geeksהֶסבֵּר: בתוכנית לעיל על ידי שימוש במילת המפתח throws טיפלנו ב InterruptedException ונקבל את הפלט כ שלום גיקים.
דוגמה 3: לזרוק חריג עםthrows
class Geeks { static void fun() throws IllegalAccessException { System.out.println('Inside fun(). '); throw new IllegalAccessException('demo'); } public static void main(String args[]) { try { fun(); } catch (IllegalAccessException e) { System.out.println('Caught in main.'); } } }
תְפוּקָה
Inside fun(). Caught in main.
הֶסבֵּר: הדוגמה שלמעלה זריקה של IllegalAccessException משיטה וטיפול בה בשיטה הראשית באמצעות בלוק try-catch.
ההבדל בין זריקה לזריקה
ההבדלים העיקריים בין זריקה לזריקה בג'אווה הם כדלקמן:
לִזרוֹק | זורק |
|---|---|
הוא משמש כדי לזרוק חריג במפורש. | הוא משמש כדי להכריז ששיטה עשויה להטיל חריג אחד או יותר. |
הוא משמש בתוך שיטה או גוש קוד. | הוא משמש בחתימת השיטה. rudyard kipling if הסבר |
זה יכול לזרוק חריגים מסומנים וגם לא מסומנים. | הוא משמש רק לחריגים מסומנים. חריגים לא מסומנים אינם מחייבים זורק |
השיטה או הבלוק זורקים את החריג. | המתקשר של השיטה אחראי לטיפול בחריג. |
עוצר את זרימת הביצוע הנוכחית באופן מיידי. | זה מאלץ את המתקשר לטפל בחריגים שהוכרזו. |
throw new ArithmeticException('Error'); | public void myMethod() זורק את IOException {} |