המכונה הווירטואלית של Java (להלן JVM) מעבדת את הקוד ומריצה שיטות בזו אחר זו, החל ב- method
main
. כשהוא מגיע לשיטה הבאה, הוא אומר שהשיטה הזו נמצאת בראש הערימה. לאחר שיטה מבוצעת במלואה, היא מוסרת מהמחסנית ומוחלפת בשיטה הבאה בתור. כדי להדגים את העיקרון, הקלד את הקוד הזה:
package errorhandling;
public class errorChecking {
public static void main(String[] args) {
System.out.println("Метод Main успешно запущен");
m1();
System.out.println("Метод Main заканчивает свою работу");
}
static void m1() {
System.out.println("Первый метод передаёт привет!(m1)");
m2();
}
static void m2() {
System.out.println("Второй метод передаёт привет(m2)");
}
}
יש לנו שלוש שיטות: שיטה main
, שיטה m1
ושיטה m2
. כאשר התוכנית מתחילה, השיטה ממוקמת בחלק העליון של הערימה main
. בתוך השיטה main
מכונה השיטה m1
. כשקוראים לו, הוא קופץ לראש הערימה. השיטה m1
בתורה קוראת ל- m2
. כעת השיטה m2
קופצת לראש הערימה, ומסירה זמנית את m1
. דמיינו את זה לשנייה - main
למעלה m1
ולמעלה m2
! לאחר שעשה את עסקיו, m2
הוא מסתיים והשליטה חוזרת ל m1
. השיטה m1
, לאחר השלמתה, מוסרת גם היא מהמחסנית, ושוב ניתנת שליטה לשיטה main
. הפעל את התוכנית שלך והסתכל בחלון הפלט: השיטה הראשית פועלת בהצלחה השיטה הראשונה אומרת hello!(m1) השיטה השנייה אומרת hello(m2) השיטה הראשית יוצאת אם משהו משתבש בשיטה m2
, ה-JVM (Java Virtual Machine ), אתה זוכר, נכון?) יחפש מטפלי שגיאות, למשל בלוק try … catch
. אם אין שגיאות בשיטת m1
מטפל השגיאות, החריגה תועבר למתודה m1
, בתקווה שהיא תוכל לטפל בה. אם הוא לא יזהה מטפל בשגיאה כאן, החריג יעבור שוב במעלה הערימה, הפעם לשיטה main
. אם השיטה main
לא תופסת את החריג, תקבל הודעת שגיאה מוזרה מודפסת בחלון הפלט. כדוגמה, הפוך את השיטה שלך m2
להיראות כך:
static void m2() {
int x = 10;
int y = 0;
double z = x / y;
System.out.println( z );
System.out.println("Method Two - m2");
}
שיטה זו מכילה חלוקה באפס שגיאה. הנה הגרסה המלאה של התוכנית, בדוק את שלך:
package errorhandling;
public class errorChecking {
public static void main(String[] args) {
System.out.println("Метод Main успешно запущен");
m1();
System.out.println("Метод Main заканчивает свою работу");
}
static void m1() {
System.out.println("Первый метод передаёт привет!(m1)");
m2();
}
static void m2() {
int x = 10;
int y = 0;
double z = x / y;
System.out.println( z );
System.out.println("Method Two - m2");
}
}
הפעל את התוכנית וראה מה נותן לך חלון הפלט: השיטה הראשית רצה בהצלחה השיטה הראשונה אומרת hello!(m1) חריגה בשרשור "main" java.lang.ArithmeticException: / ב-0 ב- errorhandling.errorChecking.m2(<u >errorChecking. java:17</u>) ב- errorhandling.errorChecking.m1(<u>Solution.java:11</u>) ב- errorhandling.errorChecking.main(<u>>Solution.java:5</u >) התהליך הסתיים עם קוד יציאה 1 אתה מסתכל על משהו שנקרא עקבות מחסנית. שלוש השורות המסומנות בקו תחתון בכחול מתייחסות לשיטות שלך, וניתן למצוא אותן ב: Name_пакета.Name_класса.Name_метода
השורה הראשונה מלמעלה היא המקום בו התרחשה השגיאה - בשיטה m2
. ג'אווה דאגה לכך שהטיפול יטופל באופן ArithmeticException
שתפס חלוקה לפי אפס שגיאות. אין מטפל בשגיאות בשיטות m2
, m1
ו . main
אז התוכנית עיבדה את זה עם מטפל השגיאות המוגדר כברירת מחדל. שנה את השיטה שלך m1
לשיטה הבאה:
try {
System.out.println("Первый метод передаёт привет!(m1)");
m2( );
}
catch (ArithmeticException err) {
System.out.println(err.getMessage());
}
כעת עטפנו את השיטה m2
בבלוק try
. בחלקו catch
, אנו משתמשים בסוג החריג שזוהה ב-Stack Trace- ArithmeticException
. הפעל את הקוד שוב ותראה את הדברים הבאים בחלון הפלט: השיטה הראשית רצה בהצלחה השיטה הראשונה אומרת hello!(m1) / by zero השיטה הראשית יוצאת שים לב שהודעת השגיאה הודפסה כ: " / by zero " . השיטה m2
לא הופעלה לחלוטין, אך הופסקה כאשר אירעה שגיאה. לאחר מכן הועברה השליטה חזרה m1
. זה קרה בגלל העובדה שהגוש catch
עצמו זיהה את השגיאה; ה-JVM לא יצר קשר עם מטפל השגיאות הסטנדרטי, אלא הציג הודעה הממוקמת בין הפלטה המתולתלת של הבלוק catch
. שימו לב שהתוכנית עצמה לא הופסקה. השליטה, כרגיל, הלכה לשיטה main
ממנה m1
היא נקראה. והשורה האחרונה של השיטה main
הייתה מסוגלת להציג את " שיטת סוף עיקרית ". זה מאוד מאוד חשוב. אם היית צריך את הערך מ m1
, לעבודה הבאה אי שם ב main
. ואם הערך לא קיים, ייתכן שהתוכנית שלך לא תעבוד בכלל כפי שאתה מצפה. כאשר אתה רואה את עקבות המחסנית בחלון הפלט, רק דע שהשורה הראשונה היא המקום שבו התרחשה הבעיה, והשורות הנותרות (אם יש כאלה כמובן) הן המקום שבו החריג הופץ במעלה הערימה, בדרך כלל מסתיימת ב- main
. תרגום מ- homeandlearn.co.uk אנו אומרים תודה ל: סרגיי סיסוייב, Treefeed...
GO TO FULL VERSION