Исключения в Java
Содержание
Исключение - это событие, которое происходит во время выполнения программы, что нарушает нормальный поток инструкций программы. Он обеспечивает способ передачи контроля с одной части программы на другую. Исключения происходят в таких ситуациях, как ваша программа заканчивается из памяти, файл не существует в указанном пути, сетевые соединения удаляются и т. Д. Более конкретно, для лучшего понимания мы можем сказать, что это ошибка Runtime во время выполнения программы, которая нарушает нормальный поток инструкций. На следующем рисунке показано исключение outofmemory:
Класс исключений используется для исключительных условий, которые должны выполнять программы. Возможные исключения в программе Java организованы в иерархию классов исключений. Класс Throwable, который является непосредственным подклассом Object, находится в корне иерархии исключений. Throwable имеет два непосредственных подкласса: Exception и Error. Существует важный подкласс Exception, известный как RuntimeException.
- try
- catch
- наконец
- throw
- throws
Синтаксис:
try{ //, которые могут вызывать исключение }catch(ExceptionClass ex){}
Чтобы перехватить исключения, часть кода помещается под проверку исключений. Это делается путем включения этой части кода в блок try {}. Когда в этом блоке возникает исключительное обстоятельство, генерируется исключение, которое передает управление обработчику исключений. Если исключение не выбрасывается, код продолжается нормально, и все обработчики игнорируются.
Пример без исключения catch:
class TestClass { public static void main (String[] args) { int value=10/0;// целое число «деление на ноль» исключает исключение System.out.println("next line..."); } }
Вывод:
Exception in thread "main" Java.lang.ArithmeticException: / by zero at TestClass.main(Main.Java:5)
Когда вы запускаете вышеуказанный код, компилятор бросает Java.lang.ArithmeticException и весь код после исключения не будет выполнен. В таких ситуациях мы должны использовать обработку исключений.
class TestClass { public static void main (String[] args) { try{ int value=10/0;// целое число «деление на ноль» исключает исключение }catch(ArithmeticException ea){ System.out.println(ea); // вы можете обрабатывать исключение в этом блоке System.out.println("Exception Handle here !!"); } System.out.println("next line..."); } }
Вывод:
Java.lang.ArithmeticException: / by zero Exception Handle here !! next line...
Здесь вы можете увидеть исключение, обрабатываемое в блоке catch, и программа продолжит следующую строку. Важно отметить, что за блоком Java try должен следовать либо catch, либо finally block.
try..catch в Java
Оператор finally должен быть связан с инструкцией try..catch. Он идентифицирует блок операторов, который должен выполняться независимо от того, происходит ли исключение в блоке try. Не обязательно включать окончательный блок вообще, но если вы это сделаете, он будет работать независимо от того, было ли исключено и обработано исключение, и попытайтесь уловить части блока. В нормальном случае исполнение блока finally выполняется после блока try. Когда происходит какое-либо исключение, сначала выполняется блок catch, а затем выполняется окончательный блок.
Синтаксис:
try { //, которые могут вызывать исключение } finally{ // выполняемые операторы }
Пример с исключением:
class TestClass { public static void main (String[] args) { try{ int value=10/0;// целое число «деление на ноль» исключает исключение System.out.println("Result is: " + value); }catch(ArithmeticException ea){ System.out.println(ea); } finally{ System.out.println("Finally should execute !!"); } } }
Вывод:
Java.lang.ArithmeticException: / by zero Finally should execute !!
Здесь исключение произошло, но блок кода finally был выполнен.
Пример с исключением:
class TestClass { public static void main (String[] args) { try{ int value=10/2; System.out.println("Result is: " + value); }catch(ArithmeticException ea){ System.out.println(ea); } finally{ System.out.println("Finally should execute !!"); } } }
Вывод:
Result is: 5 Finally should execute !!
Здесь мы видим, что программа выполняется без каких-либо исключений, но после этого блок finally также выполняется.
Как выхватить несколько исключений
Метод может вызывать несколько исключений. Однако этот метод должен объявить все проверенные исключения, которые он может
try { // Выполняем некоторую обработку, которая выдает исключения } catch (SQLException e) { someCode(); } catch (IOException e) { someCode(); } catch (Exception e) { someCode(); }
С выпуском Java 7 оракул также внес некоторые хорошие изменения в механизм обработки исключений. Прежде всего, это улучшенный блок catch block and redundant throws.
try { // Выполняем некоторую обработку, которая выдает исключения } catch(SQLException IOException e) { someCode(); } catch(Exception e) { someCode(); }
В этой функции теперь вы можете поймать несколько исключений в одном блоке catch. Перед Java 7 вы были ограничены, чтобы поймать только одну.
Проверенные и непроверенные исключения
Проверенные исключения являются подклассами Java.lang.Exception и Unchecked Exceptions являются подклассами Java.lang.RuntimeException.
Проверено исключение
Неконтролируемое исключение
Классы, которые расширяют исключение RuntimeException, называются неконтролируемыми исключениями. Исключенные исключения - это чисто программные ошибки, такие как логические ошибки или неправильное использование API, нулевые данные или даже сбои в бизнес-логике могут привести к исключениям во время выполнения. Исключения во время выполнения игнорируются во время компиляции, например. ArithmeticException, NullPointerException, ArrayIndexOutOfBoundsException и т. Д. Это абсолютно нормально обрабатывать / исключать исключенные исключения из кода. В C ++ все исключения не отмечены, поэтому компилятор не вынужден обрабатывать или указывать исключение. Программисты должны быть цивилизованными и определять или улавливать исключения
Преимущества обработки исключений
Java обеспечивает сложный механизм обработки исключений, который позволяет идентифицировать исключительные условия в коде и фиксировать исключения по мере их возникновения. Вот некоторые из важных преимуществ:
Java обеспечивает сложный механизм обработки исключений, который позволяет идентифицировать исключительные условия в коде и фиксировать исключения по мере их возникновения. Вот некоторые из важных преимуществ:...
- Обработка исключений позволяет нам контролировать нормальный поток программы, используя обработку исключений в программе.
- Возможность распространения ошибок на стек вызовов Еще одним важным преимуществом обработки исключений в объектно-ориентированном программировании является способность распространять ошибки в стеке вызовов.
- Он выдает исключение всякий раз, когда вызывающий метод обнаруживает ошибку, при условии, что вызывающий метод позаботится об этом error.
- Он также дает нам возможность организовать и дифференцировать различные типы ошибок с использованием отдельного блока кодов. Это делается с помощью блоков try-catch.