JavaRush /בלוג Java /Random-HE /מעקב אחר מחסנית ג'אווה
IvanDurov
רָמָה

מעקב אחר מחסנית ג'אווה

פורסם בקבוצה
המכונה הווירטואלית של Java (להלן JVM) מעבדת את הקוד ומריצה שיטות בזו אחר זו, החל ב- method main. כשהוא מגיע לשיטה הבאה, הוא אומר שהשיטה הזו נמצאת בראש הערימה. לאחר שיטה מבוצעת במלואה, היא מוסרת מהמחסנית ומוחלפת בשיטה הבאה בתור. כדי להדגים את העיקרון, הקלד את הקוד הזה: מעקב מחסנית Java - 1
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...
הערות
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION