StartseiteProgrammierungJava

Exceptions

08. JULI 2011
von Jörg
Programmierung - Java

Exceptions sind Ausnahmen die in der Standardbibliothek eingesetzt werden, und auf die der Programmierer geeignet reagieren muss.
Die häufigsten Exceptions:

  • RuntimeException
  • IOException
  • NullPointerException
  • FileNotFoundException
  • NumberFormatException
  • ArithmeticException

Jedoch ist RuntimeException die Elternklasse von unter anderem NullPointerException, NumberFormatException oder ArithmeticException.
RuntimeException und deren Kindklassen müssen im Gegensatz zu gewöhnlichen Ausnahmesituationen jedoch nicht explizit behandelt werden.

Jede Exception ist ein Objekt das gefangen oder geworfen werden kann.

try - catch

Zu jeder try Anweisung gehört auch mindestens ein catch Anweisungsblock.

01
02
03
04
05
06
07
08
try
{ 
   //ANWEISUNG
}
catch (AUSNAHME)
{
   //ANWEISUNG
}

Im try-Block werden Methoden aufgerufen die eventuell eine Ausnahmebedingung werfen könnten oder unter Umständen einfach nicht funktionieren.
Diese Exeption wird dann aufgefangen und in einem catch-Block behandelt. Somit stürzt das Programm nicht ab, und der Anwender kann informiert werden.

Beispiel:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
import java.util.Scanner;
import java.util.InputMismatchException;

public class try_catch
{
     public static void main (String[] args)
     {   int zahl = 0;
         Scanner eingabe = new Scanner(System.in);
         System.out.print("Bitte eine Zahl eingeben: ");
         try
         {   zahl = eingabe.nextInt();
         }
         catch (InputMismatchException e)
         {
            System.out.println("Ihre eingegebene Zahl ist kein Integer");
         }
         System.out.println("Ihre eingegebene Zahl: " + zahl);
     }
}

Ohne try und catch bricht das Programm bei Eingabe eines Buchstaben ab, mit jedoch wird wird die Exeption InputMismatchException mit catch aufgefangen und dem Benutzer gesagt das die Eingabe keinen Integer entspricht.

throws

Mit throws im Methodenkopf wird darauf hingewiesen, dass eine auftretende Exception "weitergeworfen" wird.

01
02
03
void my_methode throws FileNotFoundException
{   //ANWEISUNGEN
}

Tritt in dieser Methode nun eine FileNotFoundException auf, so wird die Methode abgebrochen und die Exception eine Ebene nach oben weitergeleitet.
Bis die Ausnahme behandelt wird, oder wir uns in der main-Methode befinden und es noch keine explizite Behandlung gibt, so würde die Exception an das Java-System weitergeleitet, welches das Programm abbricht.

finally

Die Anweisungen im finally-Block werden nach einer Ausnahmebehandlung immer durchgeführt. Eventuell anwendbar um sicherzugehen das eine Datei auch wieder geschlossen wird.

01
02
03
04
05
06
07
08
try 
{   //ANWEISUNGEN   }
catch( IOException ex ) 
{   //ANWEISUNGEN   }
finally 
{   if( out != null ) 
       out.close();   
}

Beispiel zum Testen und verstehen:

Rang.java
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
public class Rang
{   private int persNummer;
    private int rang;
    
    public Rang(int nr, int r)throws RangAusnahme
    {   if(r < 1 || r > 3)
        {   throw new RangAusnahme(r);
        }
        persNummer = nr;
        rang       = r;
    }
    public void zeige()
    {   System.out.println("Personalnummer: " + persNummer + ",Rang: " + rang);

    }
}
RangAusnahme.java
01
02
03
04
05
06
07
08
09
10
11
public class RangAusnahme extends Exception
{   public RangAusnahme(){}

    public RangAusnahme(String msg)
    {   super(msg);
    }
    
    public RangAusnahme(int rang)
    {   super("Falscher Rang: " + rang);
    }
}
ThrowsTest.java
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class ThrowsTest
{   public static void main(String[] args)
    {   int persNummer = 100456;
        int rang       = 1;
        Rang r = null;
        
        try
        {   r = new Rang(persNummer, rang);

        }
        catch(RangAusnahme e){
            System.out.println(e.getMessage());
            System.out.println("Rang wird auf hoechsten eingestellt");
            
            try
            {   r = new Rang(persNummer, 3);

            }
            catch(RangAusnahme a){}
        }
        r.zeige();
    }
}

Hinterlasse einen Kommentar

Ein Frosch der sich an der Seite festhält