Несколько лет назад я, будучи новичком, помню, на практических шишках пришёл к выводу, что если хватать все исключения Throwable-ом, то будет мне счастье. Но тогда же “умными” сеньёрами мне было настучено по рукам. Потому что так Фулер (тот что Мартин) какой-то то там сказал или просто карго-культ. Вот так надо и больше никак! Ну да ясный код с ними. Я же, когда мне было надо, один хрен юзал где Throwable, а где Exception. Вообщем мне хватало. Карго-последователи утверждают, якобы, что ровными руками написать код который бы генерил исключения неотлавливаемые через Exception – невозможно.
Но вот недавно натолкнули меня коллеги на следующий код:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
package com.delfin.test; public class Main { public static void main(String[] args) { try { new A(); } catch (Throwable e) { System.out.println("Caught"); } } } class A { static { foo(); } private static void foo() { throw new RuntimeException("That is a my exception"); } } |
Вообщем, идея простая. У нас есть код, который надо выполнить (строка 7). В этом коде простреливает такой вот эрор java.lang.ExceptionInInitializerError, полученный, кстати, весьма честно – стреляем рантайм исключение из статического блока при инициализации класса:
Получается что чхать хотел этот зверёк на Exception и может быть перехвачен только Throwable. Вот так вот.
