1. throw
оператор
Когато изключение бъде уловено от catch
блок и докато не бъде хвърлено към Java машината, това е просто обект, който наследява Exception
(or по-скоро Throwable
). Самият обект на изключение няма ниHowви магически свойства.
Цялата логика на това How работят изключенията е просто специален начин, по който Java машината се държи, когато към нея бъде хвърлено изключение.
Винаги можете да хвърлите отново уловено изключение към Java машината. За да направите това, трябва да използвате throw
оператора:
throw exception;
Пример:
Код | Конзолен изход |
---|---|
|
|
В този code ние хванахме изключение, показахме съобщение за него на екрана и след това го хвърлихме отново.
Повторно хвърлено изключение не може да бъде уловено от други catch
блокове в същия try
блок.
2. Вашите изключения
Между другото, можете сами да създадете обект на изключение: това е просто обект, чийто тип е Exception
or клас, който го наследява. И го хвърли.
По-лесно е, отколкото звучи. Пример:
Код | Конзолен изход |
---|---|
|
|
В примера по-горе създадохме нов обект за изключение, чийто тип е RuntimeException
и веднага го хвърлихме с помощта на throw
оператора.
Той ще бъде незабавно уловен от catch
блока, тъй като RuntimeException наследява Exception
. Кодът catch (Exception except)
улавя обекти-изключения от всички класове, които наследяват Exception
класа.
3. finally
ключова дума
Друг важен момент. Понякога програмистът трябва да извърши няHowво действие, независимо дали е възникнало изключение в codeа. Да предположим например, че сме отворor файл за запис. Отвореният файл трябва да бъде затворен чрез извикване close()
.
try
{
// Code where an exception might occur
}
catch(ExceptionType name)
{
// Exception handling code
}
finally
{
// Code that must executed no matter what happens
}
finally
За извършване на тези задължителни действия към конструкцията беше добавен друг вид блок ( ) try-catch
, като по този начин се създаде try-catch-finally
конструкцията. Изглежда така:
Пример:
FileInputStream source = null;
try
{
source = new FileInputStream("c:\\note.txt");
source.read();
}
catch(Exception except)
{
System.out.println("Caught the exception");
throw except;
}
finally
{
if (source != null)
source.close();
}
Кодът в finally
блока ще се изпълни във всеки случай, независимо дали е имало изключение. Дори ако изключение е хвърлено и не е уловено, блокът finally
пак ще се изпълни.
Между другото, ако не искате да хванете изключение, но имате нужда от finally
блок, използвайте съкратената нотация за try-catch-finally
конструкцията: try-finally
блок. Изглежда нещо подобно:
try
{
// Code where an exception might occur
}
finally
{
// Code that must executed no matter what happens
}
GO TO FULL VERSION