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:
|
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"