Ausnahmen / Exceptions

Werbung
Java
FH Merseburg SS 2002
Ausnahmen / Exceptions


während der Objektlebenszeit können Fehler auftreten:
 Eingabefehler, Programmfehler, ungewöhnliche Zusstände anderer
Objekte etc.
Problem: Fehler müssen abgefangen werden  u. U. recht aufwendig
Java  Konzept der Ausnahmebehandlung:
 eine Ausnahme wird ausgelöst, wenn eine unerwartete Fehlerbedingung
auftritt
 Anweisungen, in denen Fehler auftreten könnten, werden zusammengefaßt 
try-Block
 Falls es bei der Ausführung der Anweisungen im try-Block zu Ausnahmen
kommt, werden diese im folgenden catch-Block behandelt, d. h. es wird
darauf reagiert
try {
// Anweisungen, in denen Fehler auftreten können
}
catch (Exception1 e){
// e = lokale Referenzvariable
// Behandlung der Ausnahmen vom Typ 1
}
catch (Exception2 e){
// Behandlung der Ausnahmen vom Typ 2
}
finally {
// Anweisungen zum Beenden des try-Blockes
}


saubere einfache Art, Fehler abzufangen, ohne den Quelltext zu überfrachten
exception = Signal an das Objekt, daß eine Bedingung eingetreten ist, die
besondere Behandlung erfordert

siehe Beispielprogramm waitForReturn:
public static void waitForReturn ()
{
BufferedReader din = new BufferedReader(new InputStreamReader(System.in));
try
{
System.out.println("\nBitte Return-Taste druecken...");
din.readLine();
}
catch (IOException e)
{
System.err.println("Fehler: "+e);
}
}
try-Block
 ist
´normaler´
Block

wird
Ausnahmebehandlung beendet
 auch durch break, continue, return
durch
die
Anforderung
einer
catch-Block
 kein, ein oder mehrere catch-Blöcke möglich, die auf Exceptions des tryBlockes reagieren
 Ursachen der Exceptions werden beseitigt (Ressourcen freigeben oder neue
Ausnahmen anstoßen)
481352545
-1-
Java


FH Merseburg SS 2002
Definition wie Methode: Parameter ist ein Objekt der Klasse Throwable oder
einer ihrer Unterklassen
Ablauf der Ausnahembehandlung:
Wenn eine Ausnahme der Klasse IOException angefordert wird, wird der
catch-Block mit einem Paramter IOException oder einer Basisklasse von
IOException angesprungen und die Anweisungen des Blockes werden
ausgeführt.
finally-Block
 Anweisungen, die nach dem try-Block oder der Ausnahmebehandlung des
catch-Blockes ausgeführt werden sollten
 Freigabe von Ressourcen etc. vergleichbar der finalize-Methode beim GC
 Wird immer ausgeführt, auch nach return, break, continue
 Ist kein passender catch-Block vorhanden, wird erst der finally-Block
ausgeführt und dann beendet der Compiler mit dem Namen der Ausnahme
und der beim Erzeugen der Ausnahme angegebenen Meldung


Exceptions sollten nur behandelt werden, wenn normalerweise nicht
auftretende Ereignisse eintreten
Wird
die
Ausnahme
nicht
abgefangen,
tritt
standardmäßige
Ausnahmebehandlung in Kraft
Ausnahmen sind Klassen
 Exceptions sind eigene Klassen  es gibt eine Klasse pro
Ausnahmetyp
 Sind abgeleitet von der Klasse Throwable bzw. einer ihrer Unterklassen Error
oder Exception



Error:
Probleme
des
Linkers
beim
dynamischen
Laden
Programmteilen (Probleme mit der virtuellen Java Maschine)
Stellen schwerwiegende Fehler dar und sollten nicht korrigiert werden
von
Klasse Throwable enthält
 eine Objektkomponente vom Typ String, die eine Meldung für den
Benutzer über den Grund der Ex. Enthält
 eine Methode getMessage() zur Ausgabe des Strings
mögliche Ausnahmen
Eigene Ausnahmen

Eigene Ausnahmen von Exception ableiten
class Exception1 extends Exception {
public Exception1(){
super();
}
public exception1(String s){
super(s);
}
}
Motivation für eigene Ausnahmen:
 Reaktion auf spezielle Fehlersituationen
 Benutzerlesbaren Fehlertext erzeugen
 Daten, die Ausnahme ausgelöst haben, speichern
Beispiel: eine eingegebene Personalnummer wird nicht gefunden
481352545
-2-
Java
FH Merseburg SS 2002
public class PersNrNichtGefundenException extends Exception {
public String persNr;
public Object person;
// Konstruktor
PersNrNichtGefundenException (String persNr, Object person) {
Super (“Keinen Namen mit der Personalnummer“+ persNr +“
gefunden.“)
// merken der Daten, die Fehler hervorgerufen haben
this.persNr = perNr;
this.person = person;
}
}
Auslösen von Ausnahmen

erzeugen von Ausnahmen durch throw
throw new Exception1 („Die eigene Ausnahme 1 ist aufgetreten);
ändern des Namens eines Mitarbeiters durch Vorgabe einer Personalnummer
public void aendereNamen (String persNr, Object person)
throws PersNrNichtGefundenException {
Person pers = find(persNr);
if (pers == null) // wenn persNr nicht vorhanden
// erzeugen eines Objektes der Klasse PersNr....
throw new PersNrNichtGefundenException(persNr, this);
// wenn persNr existiert, dann verarbeiten ...
}
Das throws-Konstrukt

throws gibt an, welche Ausnahmen eine Methode erzeugen kann =
Deklaration der auslösbaren zu berücksichtigenden Ausnahmen (checked
exceptions)
public static void main (String[] args) throws IOException
... }
{
oder eine Liste von Ausnahmen
public void test throws Exception1, Exception2

{
... }
statt der Aufzählung mehrerer Exceptions kann auch die Basisklasse
benutzt werden
protected void finalize() throws Throwable {
// siehe Garbage Collector
super.finalize();
close();
}
Möglichkeiten zur Behandlung der throws-Ausnahmen:
 Ausnahme abfangen und behandeln
 Ausnahme abfangen und auf eigne A. abbilden  mit throw selbst
auslösen
 ohne Behandlung die Methode passieren lassen

man darf nur Ausnahmen auslösen, die im throws-Konstrukt angegeben sind
481352545
-3-
Java

FH Merseburg SS 2002
das Fehlen von throws bedeutet, daß keine Ausnahmen ausgeführt werden
kann  führt u.U. zu Compilerfehlern
Exception-Hierarchie
Object
Throwable
Exception
Error
AbstractMethodError
...
(andere Exceptions)
RuntimeException
...
...
IndexOutOfBoundsException
NullPointerException
NumberFormatException
...
***
481352545
-4-
Herunterladen