Galileo Computing < openbook >
Galileo Computing - Professionelle Buecher. Auch fuer Einsteiger.
Galileo Computing - Professionelle Buecher. Auch fuer Einsteiger.


Java ist auch eine Insel von Christian Ullenboom
Buch: Java ist auch eine Insel (Galileo Computing)
gp Kapitel 7 Exceptions
gp 7.1 Problembereiche einzäunen
gp 7.1.1 Exceptions in Java mit try und catch
gp 7.1.2 Eine Datei auslesen mit RandomAccessFile
gp 7.1.3 Ablauf einer Ausnahmesituation
gp 7.1.4 Wiederholung kritischer Bereiche
gp 7.1.5 throws im Methodenkopf angeben
gp 7.1.6 Abschließende Arbeiten mit finally
gp 7.1.7 Nicht erreichbare catch-Klauseln
gp 7.2 Die Klassenhierarchie der Fehler
gp 7.2.1 Die Exception-Hierarchie
gp 7.2.2 Oberausnahmen fangen
gp 7.2.3 Alles geht als Exception durch
gp 7.2.4 Ausnahmen, die nicht aufgefangen werden müssen: RuntimeException
gp 7.2.5 Harte Fehler: Error
gp 7.3 Werfen eigener Exceptions
gp 7.3.1 Typecast auf ein null-Objekt für eine NullPointerException
gp 7.3.2 Neue Exception-Klassen definieren
gp 7.4 Rückgabewerte bei ausgelösten Ausnahmen
gp 7.5 Stack-Aufruf analysieren
gp 7.6 Assertions
gp 7.6.1 Assertions in eigenen Programmen nutzen
gp 7.6.2 Assertions aktivieren
gp 7.6.3 Assertion-Nutzung in den Sun-Quellen
gp 7.7 Sicherheitsfragen mit dem SecurityManager klären
gp 7.7.1 Programm beenden


Galileo Computing

7.5 Stack-Aufruf analysierentoptop

Immer dann, wenn wir eine Exception haben, handelt es sich um eine Unterklasse von Throwable. Jedes der Ausnahme-Objekte liefert Informationen über den Grund der Ausnahme mit.


class java.lang.Throwable
implements Serializable

gp void printStackTrace()
Schreibt das Throwable und anschließend den Stack-Inhalt in den Standardausgabestrom.
gp void printStackTrace( PrintStream s )
Schreibt das Throwable und anschließend den Stack-Inhalt in den angegebenen PrintStream.
gp void printStackTrace( PrintWriter s )
Schreibt das Throwable und anschließend den Stack-Inhalt in den angegebenen PrintWriter.

Doch auch ohne Ausnahme bekommen wir einen Aufruf-Stack. Der Stack, der zum Zeitpunkt eines Methodenaufrufs aufgebaut wurde, lässt sich mit einer Throwable-Funktion erfragen. Damit lassen sich Schlüssel über den Programmablauf rekonstruieren.

StackTraceElement trace[] = new Throwable().getStackTrace();

Wir erkennen, dass jede Methode durch ein StackTraceElement-Objekt repräsentiert ist. Dies erlaubt den Zugriff auf den Dateinamen, in dem die Methode definiert wurde, die Programmzeile, den Methodennamen und die Information darüber, ob die Methode nativ ist oder nicht.

Sehen wir uns das Beispiel eines Programms an, welches mehrere Methoden aufruft. Im letzten Schritt wollen wir den Stack ausgeben. Ein StackTraceElement definiert eine toString()-Methode, die alle Informationen abgibt.

Listing 7.12 GetStackTrace.java

public class GetStackTrace
{
  public static void showTrace()
  {
    StackTraceElement trace[] = new Throwable().getStackTrace();
    for ( int i = 0; i < trace.length; i++ )
    {
      StackTraceElement ste = trace[i];
      System.out.println( ste );
    }
  }
  public static void m( int n )
  {
    if ( n == 0 )
    {
      showTrace();
      return;
    }
    m( n - 1 );
  }
  public static void main( String args[] )
  {
    m( 2 );
  }
}

Das Programm gibt aus:

GetStackTrace.showTrace(GetStackTrace.java:5)
GetStackTrace.m(GetStackTrace.java:18)
GetStackTrace.m(GetStackTrace.java:21)
GetStackTrace.m(GetStackTrace.java:21)
GetStackTrace.main(GetStackTrace.java:27)




Copyright (c) Galileo Press GmbH 2004
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press GmbH, Gartenstraße 24, 53229 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de