Я никогда раньше не занимался серьезным кодированием на Java, но я изучил синтаксис, библиотеки и концепции, основываясь на моих существующих навыках (Delphi и C #). Одна вещь, которую я с трудом понимаю, - это то, что я видел так много кода, который молча потребляет исключения после printStackTrace
следующего:
public void process() {
try {
System.out.println("test");
} catch(Exception e) {
e.printStackTrace();
}
}
Подобный код есть почти в каждой статье и проекте Java, с которыми я сталкивался. Насколько мне известно, это очень плохо. Исключение почти всегда следует перенаправлять во внешний контекст следующим образом:
public void process() {
try {
System.out.println("test");
} catch(Exception e) {
e.printStackTrace();
throw new AssertionError(e);
}
}
В большинстве случаев исключение должно обрабатываться в самом внешнем цикле, который принадлежит базовой структуре (например, Java Swing). Почему такой код в мире Java кажется нормой? Я озадачен.
Исходя из моего опыта, я бы предпочел полностью удалить printStackTrace . Я бы просто перебросил как необработанный aka RuntimeException
(или, что еще лучше, AssertionError
), затем поймал бы и зарегистрировал его в наиболее подходящем месте: во внешнем цикле фреймворка.
public void process() {
try {
System.out.println("test");
} catch(Exception e) {
throw new AssertionError(e);
}
}