homedukeOOP mit Java: Abfangen von Ausnahmen Prof. Dr. Uwe Schmidt FH Wedel

Abfangen von Ausnahmen

weiter

weiter

Syntax

Regeln:

Statement    :: ... | TryStatement | ...
 
TryStatement ::= try Block Catches
              |  try Block [ Catches ] Finally
 
Catches      ::= CatchClause
              |  Catches CatchClause
 
CatchClause  ::= catch ( Type Identifier ) Block
 
Finally      ::= finally Block
 
Block        ::= { ... }
 

weiter

Schema

try {
      // Anweisungen, die eine
      // Ausnahme auslösen können
  ...
}
catch (FirstException e ) {
      // Anweisungen für die Behandlung
      // einer FirstException
  ...
}
catch (SecondException e ) {
      // Anweisungen für die Behandlung
      // einer SecondException
  ...
}
finally {
      // Anweisungen, die
      // immer ausgeführt werden
  ...
}
weiter

weiter

Beispiel: Division durch 0

int a,b,c;
 
...
 
try {
 
  a = b/c;
 
}
catch ( ArithmeticException e ) {
 
  a = ( b > 0)
      ? Integer.MAXVALUE
      : Integer.MINVALUE;
 
}

==> ArithmeticException

weiter

weiter

Beispiel: mehrere catch Anweisungen

class Ausnahme1 {
 
   public static
   void main(String[] args) {
 
     int i = 0;
 
     try {
       i = Integer.parseInt(args[0]);
     }
     catch ( NumberFormatException e ) {
 
       System.out.println("1. Parameter keine Zahl");
 
     }
     catch ( ArrayIndexOutOfBoundsException e ) {
 
       System.out.println("Parameter fehlt");
 
     }
     System.out.println("Parameter = " + i);
   }
}
 

==> ArithmeticException

weiter

weiter

Beispiel: alle Ausnahmen abfangen

class Ausnahme2 {
 
   public static
   void main(String[] args) {
 
     int i = 0;
 
     try {
       i = Integer.parseInt(args[0]);
     }
     catch ( Exception e ) { }
 
     System.out.println("i = " + i);
   }
}
 

==> Exception

weiter

weiter

Klassenhierarchie nicht beachtet

try {
 
  ...
}
catch ( IndexOutOfBoundsException e ) {
 
  ...
}
catch ( ArrayIndexOutOfBoundsException e ) {
 
  ...
}
weiter
merke
Fehlermeldung: catch not reached.
merke

weiter

Beispiel: finally

int [] a;
 
...
 
void doIt() {
  try {
        // temporäres globales Feld
        // erzeugen
    a = new int [100];
 
        // Berechnungen auf dem Feld a
    ...
  }
  finally {
        // a freigeben
    a = null;
  }
}

Letzte Änderung: 14.02.2012
© Prof. Dr. Uwe Schmidt
Prof. Dr. Uwe Schmidt FH Wedel