content

Ausgangslage

    @Override
    public void setPs(int ps) {
        if ((ps >= 70) && (ps <= 200)) {
            this.ps = ps;
        }
        else {
            System.out.println("Fehler: ungültige PS Anzahl! Bei einem Auto muss diese zw. 70 und 200 liegen!");
            this.ps = 100;
        }
    }

Es wurde im Fehlerfall:

  • Fehlermeldung ausgegeben

  • Zuweisung des Defaultwertes

Auch der Konstruktor lieferte eine gültige Objektreferenz.

ToDo

Exception Klasse

public class FahrzeugException extends Exception {
    public FahrzeugException(String meldung) {
        super(meldung);
    }
}

Wir bekommen die Funktionalität der Exception Klasse geschenkt.

setMethode

    @Override
    public void setPs(int ps) throws FahrzeugException {
        if ((ps >= 70) && (ps <= 200)) {
            this.ps = ps;
        }
        else {
            throw new FahrzeugException("Fehler: ungültige PS Anzahl! Bei einem Auto muss diese zw. 70 und 200 liegen!");
        }
    }

Nun liefert die setMethode eine Exception.

Änderungen:

  • throw new Fahrzeugexception mit der Fehlermeldung

  • Methodenkopf liefer auch eine Exception

Vaterklasse

    public abstract void setPs(int ps) throws FahrzeugException;

Auch hier gehört der Methodenkopf angepasst.

Die beiden Methodenköpfe müssen IDENT sein.

Aufrufe

001.png

Die ganze Aufrufhierarchie liefert eine Exception.

Erst in der Test-Klasse darf die Exception abgefangen werden.

Test

    @Test
    public void testAutoPSWenig() {
        Auto a = null;
        try {
            a = new Auto("Opel", 69, true, false);
            System.out.println(a);
            assertEquals(1,0);
        }
        catch (FahrzeugException e) {
            System.out.println(e.getMessage());
            assertEquals(1,1);
        }
    }

In der Testklasse wird die Exception abgefangen und die Fehlermeldung ausgegeben.

Struktur

Ausgangslage

    public void hinzufugen(int pos, Fahrzeug neu) {
        if (neu != null) {
            if ((pos >= 0) && (pos <= fahrzeuge.size())) {
                if (fahrzeuge.contains(neu) == false) {
                    fahrzeuge.add(pos, neu);
                }
                else {
                    System.out.println("Fehler: Fahrzeug schon vorhanden!");
                }
            }
            else {
                System.out.println("Fehler: ungültige Position!");
            }
        }
        else {
            System.out.println("Fehler: kein Fahrzeug!");
        }
    }

Eine Folge von if/else Statements.

Prüfung

    public void hinzufugen(int pos, Fahrzeug neu) throws FahrzeugException {
        if (neu == null)
            throw new FahrzeugException("Fehler: kein Fahrzeug!");
        if ((pos < 0) || (pos > fahrzeuge.size()))
            throw new FahrzeugException("Fehler: ungültige Position!");
        if (fahrzeuge.contains(neu))
            throw new FahrzeugException("Fehler: Fahrzeug schon vorhanden!");

        fahrzeuge.add(pos, neu);
    }

Zuerst werden die Fehlerfälle abgearbeitet.

Dann bleibt nur mehr der auszuführende Code übrig.