Вопрос по java, exception, throwable – Лучшие практики для ловли Throwable в Java
Иногда вам просто нужно поймать Throwable, например, при записи очереди диспетчера, которая отправляет общие элементы и нуждается в восстановлении после любых ошибок (указанный диспетчер регистрирует все обнаруженные исключения, но в автоматическом режиме, а затем выполнение продолжается для других элементов).
Один из лучших способов, который я могу придумать, - это всегда перебрасывать исключение, если оно InterruptedException, потому что это означает, что кто-то прервал мой поток и хочет его убить.
Другое предложение (которое пришло из комментария, а не ответа) - всегда перебрасыватьThreadDeath
Любые другие лучшие практики?
ThreadDeath
также должен быть переброшен, но он не должен быть переброшен в первую очередь.
Tom Hawtin - tackline
Наверное, самый важный,never swallow a checked exception, Я имею в виду, что не делаю этого:
try {
...
} catch (IOException e) {
}
unless that's what you intend, Иногда люди проглатывают проверенные исключения, потому что они не знают, что с ними делать, или не хотят (или не могут) загрязнить свой интерфейс с помощью «throws Exception». статьи.
Если вы не знаете, что с этим делать, сделайте следующее:
try {
...
} catch (IOException e) {
throw new RuntimeException(e);
}
Другой, который приходит на ум, это убедиться, что вы имеете дело с исключениями. Чтение файла должно выглядеть примерно так:
FileInputStream in = null;
try {
in = new FileInputStream(new File("..."));;
// do stuff
} catch (IOException e) {
// deal with it appropriately
} finally {
if (in != null) try { in.close(); } catch (IOException e) { /* swallow this one */ }
}
возможно, его суперкласса VirtualMachineError)? Я не могу себе представить, что вы можете многое сделать после чего-то такого серьезного.
VirtualMachineError
сложно, потому что ваша программа находится в неопределенном состоянии:stackoverflow.com/questions/8728866/…
то к тому времени, когда исключение возвращается к вам, нет никакого смысла что-либо делать с ним, кроме как регистрировать его. Очередь событий Swing имеет в основном такой тип поведения.
В качестве альтернативы вы могли бы предоставить ловушку для «обработчика необработанных исключений», quot; похожий наThreadGroup, Имейте в виду, что обработчик может занять много времени, и в конечном итоге задержать вашего диспетчера.
Что касается InterruptedException: единственное, что заботится об этом, - это ваш цикл диспетчеризации, который должен проверять некоторое внешнее состояние, чтобы увидеть, должно ли оно прекратить обработку.
если вы разрабатываете API, который будет использоваться кем-то другим, лучше перебросить исключение или обернуть его в свое собственное исключение и выбросить.
Принимая во внимание, что если вы разрабатываете приложение для конечных пользователей, вам нужно обработать это исключение и сделать все необходимое.