Fehlerbehandlung (Exception werfen)
Exception ist eine Klasse. Bei einem Fehlerfall erzeugen wir ein Objekt dieser Klasse:

Dadurch wird ein "Throws Exception" beim bei der Methodendeklaration mit angehangen:

Aber der Fehler wird an die Haupt-App weiter-gereicht:

In der Main-App wird der Fehler ("flaeche" ist rot unterkringelt) NICHT noch weiter nach oben gereicht.
Wir erstellen eine eigene Klasse, lassen diese aber im util-Package:

Wir ändern Throwable nach Exception, weil wir keine Error- sondern nur weiche (fachliche) Fehlermeldungen werfen wollen.
Die Klasse wird mit einem String in der Signatur aufgerufen. Diese Message wird beim Aufrufen an die Oberklasse "Exception" weiter gereicht.

Im Kreisrechner sieht es dann so aus:

Jetzt liegt das Fähnchen mit der Radius-Exception aber immer noch auf dem Boden:

Wir fügen die catch-Klause hinzu:


Das kleine e ist das Register im Speicherobjekt in der CPU, es ist das Objekt vom Typ RadiusException.
Wenn man das Programm startet, sieht das Ergebnis so aus:

Wir widerholen das für den Umfang:

Bus
Wir erstellen einen Bus
Usepfeil:
Die Klasse Bus benutzt für den Fahrer und für die Fahrgäste die Klasse Person

Package Fahrzeuge, Klasse Bus package de.firma.fahrzeuge;import de.firma.model.Person;
public class Bus extends Object {
// Eigenschaften
private int busNR;
private int anzahlSitze;
private int anzahlFahrgaeste;
private Person fahrer;
private Person[] fahrgaeste;//Konstruktoren public Bus(int busNR, int anzahlSitze) { this.busNR = busNR; this.anzahlSitze = anzahlSitze; this.anzahlFahrgaeste = 0; this.fahrer = null; this.fahrgaeste = new Person[anzahlSitze]; } public Bus(int busNR, int anzahlSitze, Person fahrer) { this(busNR, anzahlSitze); this.fahrer = fahrer; } // Getter- und Setter Methoden public int getBusNR() { return busNR; } public void setBusNR(int busNR) { this.busNR = busNR; } public int getAnzahlSitze() { return anzahlSitze; } public int getAnzahlFahrgaeste() { return anzahlFahrgaeste; } public Person getFahrer() { return fahrer; } public void setFahrer(Person fahrer) { this.fahrer = fahrer; } //Business Methoden public void einsteigen(Person p) { for (int i = 0; i < this.anzahlSitze; i++) { if (this.fahrgaeste[i] == null) { this.fahrgaeste[i] = p; this.anzahlFahrgaeste++; break; } } } public void showStatus() { System.out.println("Fahrer: " + this.fahrer.getVorname() + " " + this.fahrer.getNachname()); System.out.println("BusNr: " + this.busNR); System.out.println("Anzahl Fahrgäste: " + this.anzahlFahrgaeste); System.out.println("------------------------"); // Mengenschleife for (Person p : this.fahrgaeste) { if (p != null) { System.out.println("Fahrgast: " + p.getVorname() + " " + p.getNachname()); } } }
}
Im package de.firma erzeugen wir die Klasse Simpsons:
package de.firma;import de.firma.fahrzeuge.Bus;
import de.firma.model.Arbeiter;
import de.firma.model.Fammgr;
import de.firma.model.Geschlecht;
import de.firma.model.Schueler;import java.time.LocalDate;
public class Simpsons {
public static void main(String[] args) {
Arbeiter a1 = new Arbeiter("Homer", "Simpson", 35, 120, LocalDate.of(1969, 11, 17),
Geschlecht.MAENNLICH, "AKW Springfield", 3400.0);
Fammgr f1 = new Fammgr("March", "Simpson", 32, 150, LocalDate.of(1973, 07, 17),
Geschlecht.WEIBLICH, "Hausfrau", 7800.0);
Schueler s1 = new Schueler("Bart", "Simpson", 12, 90, LocalDate.of(1995, 03, 05),
Geschlecht.MAENNLICH,"Springfield Elementary Schule",10.0);System.out.println("a1 "+ a1.toCSV()); System.out.println("f1 "+ f1.toCSV()); System.out.println("s1 "+ s1.toCSV()); System.out.println("-----------------------"); Bus b1 = new Bus(15,5, new Arbeiter("Otto","Man",27,110,LocalDate.now(),Geschlecht.MAENNLICH,"öpnv",2000)); b1.showStatus(); }
}
Wenn wir die Simpsons laufen lassen, sehen wir folgendes Ergebnis:

Wir erstellen noch weitere Exceptions:


Übung01 0301-oop-personen
Bus erweitern:
Einsteigen mit einer anderen Signatur: einsteigen (Person p, in sitznr)
Aussteigen (Person p)
Aussteigen (int sitznr)

——————
Disclaimer
Alles was ich mitschrieb und verstanden habe ist ohne Gewähr.
Besten Dank an unseren
Trainer: Hans-Joachim Blanke blanke@4point.de

Mehr dazu im nächsten Blog von mir.
Gruß, Achim Mertens