Exception Handling

mediacats

Neues Mitglied
Hallo zusammen,
lerne gerade das Thema Exception-Handling und hab da so meine Schwierigkeiten (ganz schön abstrakt für meine Rübe 🙂).
Habe folgenden Code (Auszüge):
Java:
    public ErgaenztesAuto(String besitzer, String autotyp, String farbe, String standort , String fahrgestellnummer, 
            int erstzulassung, int leistung, int kmStand) {
    	
        this.besitzer = besitzer;
        this.autotyp = autotyp;
        this.farbe = farbe;
        this.standort = standort;
        this.fahrgestellnummer = fahrgestellnummer;
        this.erstzulassung = erstzulassung;
        this.leistung = leistung;
        this.kmStand = kmStand;
        if(this.kmStand  < 0){
        	throw new IllegalArgumentException("Der km-Stand muss positiv sein!");
        	}
        else{
        	this.kmStand = kmStand;
        }
        		
    
    }

und die Testdatei:
Java:
	public static void main(String[] args) {
		
		
		try{
			ErgaenztesAuto bmw = new ErgaenztesAuto ("Ines", "BMW", "schwarz" , "Berlin" , "DHX7639" , 2010 , 200 , -10000);
		}catch(IllegalArgumentException e){
			System.out.println("Der Wert des kmStandes ihres Autos  muss POSITIV sein!");
		}
		}

Frage: Bei negativen kmStand wir korrekt der Satz ausgegeben. Wie kann ich aber das Objekt weiterverwenden, wenn die Eingaben alle korrekt sind? Und was wenn ich mehrere Objekte überprüfen will...müssen die alle in einen sep. try/catch Block oder kann ich die hintereinander unter try eingeben? hab schon diverse Sachen zu EXC gelesen, aber das ist für mich nicht so einfach zu verstehen wie andere Java-Themen :noe:

Danke Euch schon mal für Eure Hilfe.
 
Weiterverwenden kannst du es, wenn du es außerhalb des try Blocks deklarierst.

Du könntest sie in einer Liste speichern und dann mit einer Schleife darüberiterieren.
 
Hallo,

du kannst deinen gesamten "normalen" Code in den try-Block schreiben. Innerhalb des try-Blocks könntest du also eine Methode von ErgaenztesAuto für bmw aufrufen. Im Block kannst du natürlich auch mehrere Instanzen der Klasse ErgaenztesAuto erzeugen. Im catch-Block wüsstest du dann aber nicht, für welches Auto der Fehler geworfen wurde.

Das Problem, das Exceptions zu lösen versuchen, ist folgendes: Die Klasse ErgaenztesAuto weiß nicht, wie es zu der unsinnigen Angabe des negativen Kilometerstandes gekommen ist und wie sie dies behandeln soll. In deinem Beispiel mit einer main-Funktion, in der der Kilometerstand fest im Code eingetragen ist, ist dies auch nicht klar. Reale Anwendungen könnten z. B. sein:
- Ein Mensch gibt in einer graphischen Oberfläche (GUI) die Daten ein; das Programm könnte ihn darauf aufmerksam machen, dass der Kilometerstand nicht negativ sein darf.
- Das Programm liest aus einer Datei (beispielsweise csv oder xml) die Daten vieler Autos ein. Dann könnte das Programm beim Auftreten eines Fehlers entweder die gesamte Datei ablehnen oder die korrekten Daten akzeptieren und die falschen in ein Fehlerprotokoll schreiben.

Übrigens ist es eine schlechte Idee, in der main den Fehlertext "Der Wert des km-Standes ..." auszugeben. Ich könnte mir gut vorstellen, dass der Konstruktor von Auto auch in anderen Fällen eine IllegalArgumentException wirft, beispielsweise wenn die Erstzulassung in der Zukunft liegt. Deshalb solltest du den Text aus der Exception lesen, mittels e.getMessage().

Gruß
Fritz
 

Zurück
Oben