kramann.info
© Guido Kramann

Login: Passwort:










kramann.info
© Guido Kramann

Login: Passwort:




Behandlung von Ausnahmen (Exceptions) in Java

(EN google-translate)

(PL google-translate)

Einerseits können beim Programmieren logische Fehler (fault) gemacht werden, die zu einer nicht korrekten Ausführung eines Programms führen (error) und dies wiederum kann zum Versagen eines Programms (failure / nicht einhalten der Spezifikation) führen.

Andererseits gibt es unsichere Operationen, die auch bei korrekter Programmierung zu errors und vielleicht sogar zu failures führen können. Dabei kann es sich um ganz alltägliche Dinge handeln:

  • Das Laden einer Datei vom Filesystem: vielleicht exisitert die Datei nicht!
  • Das Abrufen Inhalten aus dem Internet: vielleicht läßt sich gerade keine Verbindung aufbauen.
  • Das Ziehen einer Wurzel: der Radikant könnte negativ sein.
  • Das Dividieren einer Zahl: der Divisor könnte Null sein.
  • Die Eingabe von Daten durch einen Benutzer: die Eingaben könnten falsch formatiert oder gar unsinnig sein.
  • Das Ausführen einer Berechnung innerhalb eines Echtzeitprozesses: die Berechnung könnte das spezifizierte Gewährleistungsintervall zeitlich überschreiten.

Im Sprachumfang von Java ist die Behandlung von Ausnahmen (Exceptions) enthalten. Manche sind bereits vordefiniert (Division-by-zero-exception, file-not-found-exception), andere kann man sich selber mittels Vererbung erstellen.

Die unsichere Aktion wird in einen try-Block geschrieben und bei Auftreten eines Problems, kann diese Ausnahme in einem catch-Block behandelt werden. Hier ein Beispiel:

int x=7;
int y=0;
int z;
try
{
    z=x/y;
}
catch(Exception e)
{
    println(e.toString());
}

Code 0-1: Auslösen einer Exception durch eine Division durch Null.

Als Beispiel für eine selbst programmierte Exception wird angenommen, dass das Stellsignal eines Aktuators nicht den Bereich ]-100,+100[ überschreiten darf. Um solche Überschreitungen zu bewerken, wird ein Text auf die Konsole gegeben, wenn sie auftreten (Processing-sketch,weitere Erläuterungen in der Vorlesung):

import java.lang.RuntimeException; 

//Programmieren einer eigenen Exception

//Ein Stellsignal darf +/-100 N nicht überschreiten.
//Das Stellsignal wird aus der Regelabweichung mal 
//einer Verstärkung berechnet.

public void setup()
{
     Stellsignal stellsignal = new Stellsignal();
     
     try
     {
          stellsignal.berechnen(5.0);
     }
     catch(WertebereichException w)
     {
          println(w.toString());
     }
     
     try
     {
          stellsignal.berechnen(15.0);
     }
     catch(WertebereichException ww)
     {
          println(ww.toString());
     }
     
}

public void draw()
{
}

Code 0-2: Sketch "Exception"

public class Stellsignal
{
     double max = 100.0;
     double min = -100.0;
     double faktor = 10.0;
  
     public double berechnen(double regelabweichung) throws WertebereichException
     {
          double stellwert = faktor*regelabweichung;
          if(stellwert<=max && stellwert>=min)
          {
              println("Das Stellsignal beträgt: "+stellwert);
              return stellwert;
          }
          else
          {
              throw new WertebereichException();
          }
     }
}

Code 0-3: Tab "Stellsignal" im Sketch "Exception"

public class WertebereichException extends RuntimeException
{
     public WertebereichException() 
     {
          super("Überschreitung des Wertebereiches!");
     }     
}

Code 0-4: Tab "WertebereichException" im Sketch "Exception"

Processing-Sketch "Exception" (Beispiel oben).