Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hallo! Wie kann ich eine fehlerhaft eingegebenen Wert in einem Konstruktor abfangen? Mir ist schon klar, dass ich dafür die try/catch-Anweisung benutze, aber ich weiß nicht, was ich in diesem Fall in die Try-Anweisung rein schreiben muss. In meinem Beispiel betrifft es den Konstruktor kmStand.
Java:
public ErgaenztesAuto(String besitzer, String autotyp, String farbe, String standort, int fahrgestellnummer, int erstzulassung, int leistung, int kmStand) throws IllegalArgumentException {
this.besitzer = besitzer;
this.autotyp = autotyp;
this.farbe = farbe;
this.standort = standort;
this.fahrgestellnummer = fahrgestellnummer;
this.erstzulassung = erstzulassung;
this.leistung = leistung;
this.kmStand = kmStand;
//falls der kmStand mit kleiner als Null eingegeben wird, dann eine Warnung auf der Konsole ausgeben (Exception vom Typ IllegalArgumentException)
if (kmStand < 0) {
throw new IllegalArgumentException("Der km-Stand darf nicht kleiner als 0 sein!");
}
Die Klasse wird aus einer Test-Datei heraus aufgerufen. Im Moment bricht das Programm ab, aber der Fehler wird nicht abgefangen.
Java:
public static void main(String[] args) {
// erstes Objekt wird erzeugt, kmStand ist kleiner als 0
ErgaenztesAuto Objekt1 = new ErgaenztesAuto("Nicole Otto", "VW Golf", "schwarz", "Ebergoetzen", 123456789, 2006, 104, -1000);
try {
int kmStand;
}
catch (IllegalArgumentException e) {
System.out.println("Es ist ein Fehler aufgetreten: " + e.getMessage());
}
}
}
Das ist klar, dass nichts abgefangen wird. Oder hast du schon mal gehört, dass die Reservierung von Speicher für ein int eine IllegalArgumentException geworfen hätte? Mit dem Aufbau könntest du höchstens einen StackOverFlowError abfangen.
Wenn du deinen Code noch einmal genau durchgehst, wird sich dir die Lösung offenbaren.
Das ist mir schon klar, dass int kmStand nicht richtig ist, aber ich sitze eben schon Stunden an diesem Problem und komme einfach nicht drauf. Wahrscheinlich sehe ich den Wald vor lauter Bäumen nicht...
try umschließt den Programmteil, in dem der Fehler auftreten kann, im catch-Block wird ein ein Objekt des Ausnahmetyps übergeben. Ich müsste also sowas wie try kmStand angeben, aber wie?
an sich ist das syntaktisch völlig korrekt. Aber einen Sinn ergibt das trotzdem nicht. Wenn eine Exception vom Typ IllegalArgumentException in deinem Programm geschmissen wird, ist der Programmierer in 99,99 % der Fälle daran schuld. Diese Exception ist nämlich vom Typ RuntimeException und eine sogenannte UncheckedException. UncheckedExceptions sind nämlich genau aus diesem Grund nicht "behandlungspflichtig", weil man sie von vornherein verhindern kann. Lass die Exception einfach fliegen und bring damit das Programm zum Absturz. Im StackTrace kannst du dann erkennen, wer diese Methode aufgerufen hat und den Fehler mit dem falschen Wert entsprechend korrigieren.
Die Aufgabe habe ich im Rahmen eines Studienmoduls lösen müssen. Da war halt explizit davon die Rede, dass wir eine Exception vom Typ IllegalArgumentException erstellen und abfangen sollen.