Frage zu Exceptions

MinaM

Mitglied
Hallo Zusammen,

ich hätte die Frage, wann es sinnvoll ist eine Exception mit throw an die aufrufende
Methode weiterzuleiten, oder wann es besser ist sie mit einer try-catch -Klausel zu bearbeiten.

ich hoffe ihr habt eine Antwort drauf.

lg
MinaMurray
 
Hallo,
Willst du den Fehler der auftritt behandeln fange die Exception, ist dir der Fehler egal reich die Exception
einfach weiter an die nächste aufrufende Methode...

Gruß

RedWing
 
...prinzipiell korrekt.


Gesetzt dem Fall, Du willst mit Datei-Strukturen arbeiten. Abfangen mußt Du in jedem Fall die IOException. Nun macht das nicht wirklich Sinn, jedes Mal diese Exception zu behandeln:

schlecht:
Code:
public void copyAll(File dirA, File dirB) {
try { 
	File f;
	Iterator it = Arrays.asList(dirA.listFiles()).iterator();
	while (it.hasNext()) {
	 f = (File)it.next();
	 if (!copy(f, new File(dirB, f.getName()))) {
		break; //Fehler passiert
	 }
	}
}
catch (IOException ioe) {
	System.out.println("Fehler");
}
}
 
private boolean copy(File a, File b) {
try {
	FileInputStream in = new FileInputStream(a);
	FileOutputStream out = new FileOutputStream(b);
	int i;
	while(in.read(i) >= 0) {
	 out.write(i);
	}
	in.close();
	out.close();
	return true;
}
catch (IOException ioe) {
	 System.out.println("Böser Fehler");
	 return false;
}
}

besser so:
Code:
public void copyAll(File dirA, File dirB) {
try { 
	File f;
	Iterator it = Arrays.asList(dirA.listFiles()).iterator();
	while (it.hasNext()) {
	 f = (File)it.next();
	 copy(f, new File(dirB, f.getName()));
	}
}
catch (IOException ioe) {
	System.out.println("Fehler");
}
}
 
private void copy(File a, File b) throws IOException {
	FileInputStream in = new FileInputStream(a);
	FileOutputStream out = new FileOutputStream(b);
	int i;
	while(in.read(i) >= 0) {
	 out.write(i);
	}
	in.close();
	out.close();
}
 
Hallo!

Wenn du eine Exception an der Stelle des Auftretens sinnvoll(!) behandeln kannst, dann catch ...kannst du dies nicht reich sie mit throw(s) .. weiter und wandle sie gegebenenfalls in eine "sprechendere" Exception um, in dem du die Exception in einer neuen passenderen "Wrapst".

Gruß Tom
 
Stimmt. Es macht Sinn, z.B. programmeigene Exceptions zu entwerfen.

In einem Bankprogramm könnte man mit der generellen BankException anfangen und falls ein Konto nicht vorhanden ist, die aufgetretene NullPointerException zum Anlaß nehmen, eine KontoNotFoundException zu generieren, die dann eine Subklasse der BankException ist.
Prinzipiell könnten so alle relevanten (Business-)Methoden BankExceptions werfen und in oberster Ebene hättest Du ein try-catch-Konstrukt wir ein Switch und lieferst dem Anwender die passende Fehlermeldung je Exception-Typ.
Struktur ist eben alles.:p
 

Neue Beiträge

Zurück