Так все-таки чем перехватывать исключения в Java

Несколько лет назад я, будучи новичком, помню, на практических шишках пришёл к выводу, что если хватать все исключения Throwable-ом, то будет мне счастье. Но тогда же “умными” сеньёрами мне было настучено по рукам. Потому что так Фулер (тот что Мартин) какой-то то там сказал или просто карго-культ. Вот так надо и больше никак! Ну да ясный код с ними. Я же, когда мне было надо, один хрен юзал где Throwable, а где Exception. Вообщем мне хватало. Карго-последователи утверждают, якобы, что ровными руками написать код который бы генерил исключения неотлавливаемые через Exception – невозможно.

Но вот недавно натолкнули меня коллеги на следующий код:

Вообщем, идея простая. У нас есть код, который надо выполнить (строка 7). В этом коде простреливает такой вот эрор java.lang.ExceptionInInitializerError, полученный, кстати, весьма честно – стреляем рантайм исключение из статического блока при инициализации класса:

untitled

Получается что чхать хотел этот зверёк на Exception и может быть перехвачен только Throwable. Вот так вот.