Вы можете попробовать обернуть два слоя обработчиков исключений и перебросить исключение после выполнения общей обработки:
try {
try {
// your code goes here
} catch (Throwable t) {
// do common exception handling for any exception
throw t;
}
} catch (NullPointerException nx) {
// handle NPE
} catch (Throwable t) {
// handle any other exception
}
Не уверен, что мне действительно нравится это решение, хотя ... похоже на взлом. Скорее всего, я бы предпочел, чтобы Исключение явно обрабатывалось в каждом случае, даже если это означает повторение вызова какой-либо общей функции очистки.