Ще бъде ли открита грешка от Catch Block в Java?

1. Общ преглед

В тази кратка статия ще покажем как правилно да улавяме грешки в Java и ще обясним кога няма смисъл да го правим.

За подробна информация относно Throwable s в Java, моля, разгледайте нашата статия за обработка на изключения в Java.

2. Грешки при улавяне

Тъй като класът java.lang.Error в Java не наследява от java.lang.Exception , трябва да декларираме базовия клас Error - или конкретния подклас Error, който бихме искали да уловим - в оператора catch, за да го хванем .

Следователно, ако изпълним следния тестов случай, той ще премине:

@Test(expected = AssertionError.class) public void whenError_thenIsNotCaughtByCatchException() { try { throw new AssertionError(); } catch (Exception e) { Assert.fail(); // errors are not caught by catch exception } }

Следващият единичен тест обаче очаква изявлението catch да улови грешката:

@Test public void whenError_thenIsCaughtByCatchError() { try { throw new AssertionError(); } catch (Error e) { // caught! -> test pass } }

Моля, обърнете внимание, че виртуалната машина Java хвърля грешки, за да посочи сериозни проблеми, от които не може да се възстанови , като например липса на памет и препълване на стека.

По този начин трябва да имаме много, много основателна причина да хванем грешка!

3. Заключение

В тази статия видяхме кога и как могат да бъдат открити грешки в Java. Примерът с код може да бъде намерен в проекта GitHub.