Существует два типа исключений
1) Непроверено. Они определены классами Error
и RuntimeException
и всеми их подклассами. Java не принуждает вас каким-либо образом обрабатывать это исключение.
2) Проверено. Они определены как класс Throwable
и все его подклассы, которые не попадают в категорию, определенную в (1). Java заставляет вас обрабатывать эти исключения с помощью try / catch. Если вы вызываете метод, который может генерировать такое исключение (определенное с помощью ключевого слова throws
) вне блока try, ваш код не будет компилироваться.
throws
: Это способ объявить, что метод может потенциально генерировать исключение, которое должно быть уловлено с помощью try / catch. Например,
public void doSomething() throws MyException { ... }
является объявлением метода, который потенциально может вызвать экземпляр MyException
.
try
/ catch
/ finally
: Это способ обработки исключений, которые могут быть получены каким-то кодом. Коди, которую вы пытаетесь запустить, входит в блок try
, код обработки ошибок переходит в блок catch
. Необязательный блок finally
- это то, что будет выполнено независимо от того, выбрано ли исключение. На самом деле блок finally будет вызван, даже если вы сделаете return
внутри вашего try
или вашего catch
. Например,
try {
doSomething();
} catch (MyException exception) {
exception.printStackTrace();
}
или пример использования finally
:
MyResource myResource = getMyResource();
try {
myResource.open();
doStuffWithMyResource(myResource);
} catch (Exception exception) {
exception.printStackTrace();
} finally {
if (myResource.isOpen()) {
myResource.close();
}
}