JavaRush /Java-Blog /Random-DE /Java-Stack-Trace
IvanDurov
Level 25

Java-Stack-Trace

Veröffentlicht in der Gruppe Random-DE
Die Java Virtual Machine (im Folgenden als JVM bezeichnet) verarbeitet den Code und führt Methoden nacheinander aus, beginnend mit Methode main. Wenn die nächste Methode erreicht wird, wird angezeigt, dass sich diese Methode oben im Stapel befindet. Nachdem eine Methode vollständig ausgeführt wurde, wird sie vom Stapel entfernt und durch die nächste in der Warteschlange ersetzt. Geben Sie diesen Code ein, um das Prinzip zu demonstrieren: Java-Stack-Trace – 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)");
    }
}
Wir haben drei Methoden: Methode main, Methode m1und Methode m2. Wenn das Programm startet, befindet sich die Methode oben im Stapel main. Innerhalb der Methode mainwird die Methode aufgerufen m1. Wenn er aufgerufen wird, springt er an die Spitze des Stapels. Die Methode m1wiederum ruft die m2. Jetzt springt die Methode m2an die Spitze des Stapels und entfernt vorübergehend m1. Stellen Sie sich das für eine Sekunde vor – mainoben m1und oben m2! Nachdem es sein Geschäft erledigt hat, m2endet es und die Kontrolle kehrt zurück zu m1. Wenn die Methode m1abgeschlossen ist, wird sie ebenfalls vom Stapel entfernt und die Kontrolle wird wieder an die Methode übergeben main. Führen Sie Ihr Programm aus und sehen Sie sich das Ausgabefenster an: Die Main-Methode wird erfolgreich ausgeführt. Die erste Methode sagt Hallo! (m1) Die zweite Methode sagt Hallo (m2) Die Main-Methode wird beendet. Wenn in der Methode etwas schief geht m2, wird die JVM (Java Virtual Machine ), erinnerst du dich, oder?) wird nach Fehlerbehandlern suchen, zum Beispiel einem Block try … catch. m1Wenn in der Fehlerbehandlungsmethode keine Fehler vorliegen , wird die Ausnahme an die Methode übergeben m1, in der Hoffnung, dass sie sie verarbeiten kann. Wenn hier kein Fehlerbehandler erkannt wird, wird die Ausnahme erneut im Stapel nach oben verschoben, dieses Mal zur Methode main. Wenn die Methode maindie Ausnahme nicht abfängt, wird im Ausgabefenster eine seltsame Fehlermeldung angezeigt. Stellen Sie Ihre Methode beispielsweise m2so dar:
static void m2() {
    int x = 10;
    int y = 0;
    double z = x / y;
    System.out.println( z );
    System.out.println("Method Two - m2");
}
Diese Methode enthält einen Division-durch-Null-Fehler. Hier ist die Vollversion des Programms, fragen Sie bei Ihnen nach:
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");
    }
}
Führen Sie das Programm aus und sehen Sie, was das Ausgabefenster anzeigt: Die Main-Methode wurde erfolgreich ausgeführt. Die erste Methode sagt Hallo!(m1) Ausnahme im Thread „main“ java.lang.ArithmeticException: / durch Null bei errorhandling.errorChecking.m2(<u >errorChecking. java:17</u>) bei errorhandling.errorChecking.m1(<u>Solution.java:11</u>) bei errorhandling.errorChecking.main(<u>>Solution.java:5</u >) Prozess mit Exit-Code 1 abgeschlossen. Sie sehen etwas, das als Stack-Trace bezeichnet wird. Die drei blau unterstrichenen Zeilen beziehen sich auf Ihre Methoden und sind zu finden in: Name_пакета.Name_класса.Name_метода In der ersten Zeile von oben ist der Fehler aufgetreten – in der Methode m2. Java stellte sicher, dass es so gehandhabt wurde ArithmeticException, dass bei der Division durch null Fehler auftraten. In den Methoden m2, m1und maingibt es keinen Fehlerhandler . Das Programm hat es also mit dem Standard-Fehlerbehandler verarbeitet. Ändern Sie Ihre Methode m1wie folgt:
try {
    System.out.println("Первый метод передаёт привет!(m1)");
    m2( );
}
catch (ArithmeticException err) {
    System.out.println(err.getMessage());
}
Jetzt haben wir die Methode m2in einen Block verpackt try. Teilweise catchverwenden wir den Ausnahmetyp, der im Stack-Trace erkannt wurde ArithmeticException. Führen Sie den Code erneut aus und Sie werden Folgendes im Ausgabefenster sehen: Die Main-Methode wurde erfolgreich ausgeführt. Die erste Methode sagt hello!(m1) / by Zero. Die Main-Methode wird beendet. Beachten Sie, dass die Fehlermeldung wie folgt gedruckt wurde: „ / by Zero “ . Die Methode m2wurde nicht vollständig ausgeführt, sondern wurde gestoppt, als ein Fehler auftrat. Anschließend wurde die Kontrolle zurück übertragen m1. Dies geschah aufgrund der Tatsache, dass der Block catchselbst den Fehler erkannte; die JVM kontaktierte nicht den Standard-Fehlerbehandler, sondern zeigte eine Meldung an, die sich zwischen den geschweiften Klammern des Blocks befand catch. Bitte beachten Sie, dass das Programm selbst nicht gestoppt wurde. Die Steuerung ging wie üblich an die Methode, mainvon der aus m1sie aufgerufen wurde. Und in der letzten Zeile der Methode mainkonnte „ End Main method “ angezeigt werden. Das ist sehr, sehr wichtig. Wenn Sie den Wert von benötigen m1, für spätere Arbeiten irgendwo in main. Und wenn der Wert nicht vorhanden ist, funktioniert Ihr Programm möglicherweise überhaupt nicht wie erwartet. Wenn Sie den Stack-Trace im Ausgabefenster sehen, müssen Sie sich nur darüber im Klaren sein, dass in der ersten Zeile das Problem aufgetreten ist und dass in den übrigen Zeilen (sofern es welche gibt) die Ausnahme im Stack nach oben weitergegeben wurde und diese normalerweise mit „ main. Übersetzung von homeandlearn.co.uk Wir bedanken uns bei: Sergei Sysoev, Treefeed...
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION