Ich habe noch nie ernsthaft Java codiert, aber ich habe die Syntax, Bibliotheken und Konzepte basierend auf meinen vorhandenen Fähigkeiten (Delphi & C #) gelernt. Eine Sache, die ich kaum verstehe, ist, dass ich so viel Code gesehen habe, der stillschweigend Ausnahmen printStackTrace
wie folgt verbraucht :
public void process() {
try {
System.out.println("test");
} catch(Exception e) {
e.printStackTrace();
}
}
In fast jedem Java-Artikel und -Projekt, auf das ich gestoßen bin, gibt es einen ähnlichen Code wie diesen. Nach meinem Wissen ist das sehr schlecht. Die Ausnahme sollte fast immer wie folgt an den äußeren Kontext weitergeleitet werden:
public void process() {
try {
System.out.println("test");
} catch(Exception e) {
e.printStackTrace();
throw new AssertionError(e);
}
}
Meistens sollte die Ausnahme in der äußersten Schleife behandelt werden, die zum zugrunde liegenden Framework gehört (z. B. Java Swing). Warum sieht es in der Java-Welt wie die Norm aus, so zu codieren? Ich bin verwirrt.
Aufgrund meines Hintergrunds würde ich printStackTrace lieber vollständig entfernen . Ich würde es einfach als unbehandeltes aka RuntimeException
(oder noch besser AssertionError
) erneut werfen und es dann an der am besten geeigneten Stelle abfangen und protokollieren: der äußersten Framework-Schleife.
public void process() {
try {
System.out.println("test");
} catch(Exception e) {
throw new AssertionError(e);
}
}