Перезапись исключения может произойти, когда при обработке одного исключения возникает другое исключение, и оригинальное исключение не сохраняется или не связывается с новым.
Основные случаи:
В блоке finally: Если в блоке finally происходит новое исключение, оно может заменить то, которое было выброшено в блоках try или catch.
java
При неявной обработке в определенных фреймворках/библиотеках: Некоторые библиотеки или фреймворки могут перехватывать исключения, выбрасывать свои собственные, при этом теряя информацию об исходном исключении.
В старом коде или при неправильной обработке: Вручную написанный код, который не использует современный подход к обработке исключений (например, Throwable.addSuppressed() в более ранних версиях Java), может потерять информацию об исходном исключении при создании нового.
С версии Java 7 для предотвращения потери информации об исключениях, выброшенных в блоке finally при наличии другого исключения, появилась возможность использовать метод addSuppressed() интерфейса Throwable. Это позволяет связать исходное исключение с новым, указывая, что оно было подавлено.
java
В этом примере информацию об "Исходном исключении" можно получить через getSuppressed() у newEx. Однако, сама перезапись (замена) исключения в контексте, когда одно выбрасывается вместо другого, без явного связывания, остается возможной при некорректной обработке.