java tutorial - Обработка исключений Java - учебник java - java programming - учиться java - java basics - java for beginners
1- Что такое Exception (Исключение)?
- Для начала, давайте посмотрим иллюстрированный пример ниже:
- В данном примере имеется часть кода с ошибкой в результате деления на 0. Деление на 0 вызыввет исключение: ArithmeticException
HelloException.java
java - джава - учиться java - учебник java -
Обработка исключений в Java
- примеры java - java-программы
- Посмотрим поток программы через следующую иллюстрацию.
- Программо запущенно по обыкновению начиная с шага (1),(2) до (5)
- В шаге (6) происходит проблема при делении на 0.
- Программа выходит из метода main, и линия кода (7) не выполнена.
java - джава - учиться java - учебник java -
Привет исключение java
- примеры java - java-программы
- Мы исправим код примера выше.
HelloCatchException.java
- И результаты запуска примера:
java - джава - учиться java - учебник java -
catch исключение java Привет
- примеры java - java-программы
- Мы объясним поток программы иллюстрацией ниже.
- Шаги (1)-(5) абсолютно нормальны.
- Исключение происходит в шаге (6), проблема при делении на 0.
- Сразу же выполняет команду в блоке catch, шаг (7) пропущен.
- Шаг (8),(9) выполнен.
- Шаг (10) выполнен.
java - джава - учиться java - учебник java -
Java Привет перехватывать исключение explannation
- примеры java - java-программы
2- Иерархия исключения
- Это модель иерархической карты Exception в java.
- Самый высокий класс это Throwable
- Два прямых подклассов это Error и Exception.
- В ветке Exception есть подветка RuntimeException это исключение непроверенное в java во время компиляции. Значение проверенный и непроверенный во время компиляции будет изображено в следующих примерах.
java - джава - учиться java - учебник java -
java Привет поймать ошибка исключения
- примеры java - java-программы
Error
- Когда динамическое соединение не удается, или в виртуальной машине происходит серьезная проблема, то она выбрасывает Error. Типичным программам Java не стоит ловить ошибку (Error). Помимо этого, это неточно выбрасывают ли когда-нибудь ошибку типичные программы Java.
Exceptions
- Большинство программ выбрасывающих и ловящих объекты, являются подклассом Exception. Случай Exception показывает происхождение проблемы, но это не серьезная системная проблема. Большинство написанных вами программы будут выбрасывать и ловить Exception.
- Класс Exception имеет много подклассов с определением в пакете Java. Наследники показывают, что может произойти много случаев исключения. Например, NegativeArraySizeException выбрасывается, когда вы пытаетесь создать массив (array) с отрицательным элементом.
- Подкласс Exception так же имеет особое значение в языке Java: RuntimeException.
Runtime Exceptions
- Класс RuntimeException представляет исключения произшедшие во время запуска программы. Пример исключения при запуске это NullPointerException, происходит когда вы заходите в метод или поле объекта через ссылку null. Для таких испключений обычно проверяют чтобы гарантировать этот объект отличается от null, чем искать исключение.
- Так как исключения при запуске очень распространены и пытаться найти или определить их всех это не эффективно. Компилятор Java не проверяет эти исключения в процессе компиляции кода .
- Java определяет некоторые классы RuntimeException. Вы можете словить (Catch) эти исключения как и другие обычные исключения. Методы которые могут выбрасывать RuntimeException не требуют объявленмя по его определению. Помимо этого, вы можете создать ваш собственный подкласс RuntimeException.
3- Обработка исключения через try-catch
- Напишем exception унаследованный от класса Exception.
AgeException.java
TooYoungException.java
TooOldException.java
- И класс AgeUtils со статистическим методом для проверки возраста.
AgeUtils.java
Checked Exception & Unchecked Exception:
- AgeException это подкласс Exception, TooOldException и TooYoungException это 2 прямые подклассы AgeException, поэтому они являются "Checked Exception"
- В методе AgeUtils.checkAge(int) выбрасывает это исключение, поэтому на объявлении вашего метода нужно из перечислить через ключевое слово "throws". Или вы можете объявить выбрасывание на более общем уровне
- throws Exception.
- Там где используется AgeUtils.checkAge(int) тоже должна быть обработка чтобы словить эти исключения, или продолжить выбрасывание наружу.
java - джава - учиться java - учебник java -
который может создаваться исключение зарегистрированного
- примеры java - java-программы
- "Checked exception" будет проверен с помощью "Java Compiler".
java - джава - учиться java - учебник java -
исключение демо
- примеры java - java-программы
- У вас есть 2 варианта обработки:
- Выбросить наружу
- Словить и выпонить обработку исключения через try-catch.
java - джава - учиться java - учебник java -
Попробуйте поймать
- примеры java - java-программы
TryCatchDemo1.java
- В примере ниже, мы словим исключения через родительские исключения. На высшем уровнем можно словить эти исключения и все наследованные исключения.
TryCatchDemo2.java
- Вы так же можете собрать для обработки разные исключения в один блок catch, если они имеют одинаковый способ обработки в логике вашей программы.
TryCatchDemo3.java
4- Блок try-catch-finally
- Мы уже ознакомились с улавливением ошибки через блок try-catch. Для полной обработки исключений используется try-catch-finally.
TryCatchFinallyDemo.java ?
- Это поток программы. Блок finally всегда выполняется.
java - джава - учиться java - учебник java -
Блок finally
- примеры java - java-программы
5- Свернуть один Exception в другой Exception
- Нам нужно несколько классов участвующих в данном примере:
- Person: Симулирует человека участвующего в рекрутировании в компанию с информацией
- Имя, возраст, пол.
- GenderException: Исключить пол.
- ValidateException: Исключение оценки участников.
- ValidateUtils: Класс имеющий статистический метод оценивающий подходит или кандидат или нет.
- Стандартом является возраст 18-40
- и мужской пол.
Person.java
GenderException.java
- Класс ValidateException обвалакивает другой Exception.
ValidateException.java
ValidateUtils.java
WrapperExceptionDemo.java
6- RuntimeException т подклассы
- Класс RuntimeException и подклассы являются "Unchecked exception". Он не проверяется компилятором java во время компиляции. В некоторых случаях вы можете написать ваши собственные исключения наследованные от этих веток. Есть некоторые исключения в этой ветке, требующие внимания.
- Ниже являются некоторые классы принадлежащие веткам RuntimeException (Конечно не все).
java - джава - учиться java - учебник java -
исключение времени выполнения
- примеры java - java-программы
- Попробуем обработать некоторые примеры с данными видами исключений:
6.1- NullPointerException
- Это один из общих исключений, и часто создающий ошибки в программе. Исключение выбрасывается когда вы вызываете метод или заходите в поля объекта null.
NullPointerExceptionDemo.java
- Results of running the example:
java - джава - учиться java - учебник java -
Исключение нулевого указателя
- примеры java - java-программы
- В действительности, как и обработка других исключений, вы можете использовать try-catch чтобы уловить это исключение для обработки. Но это механический способ, обычно стоит проверить, чтобы удостовериться объект отличается от null перед тем, как его использовать.
- Вы можете изменить код как внизу, чтобы избежать NullPointerException:
- В действительности, как и обработка других исключений, вы можете использовать try-catch чтобы уловить это исключение для обработки. Но это механический способ, обычно стоит проверить, чтобы удостовериться объект отличается от null перед тем, как его использовать.
- Вы можете изменить код как внизу, чтобы избежать NullPointerException:
6.2- ArrayIndexOfBoundException
- Это исключение выбрасывается когда вы пытаетесь зайти в элемент с недействительным индексом в массиве. Например массив имеет 10 элементов, а вы заходите в элемент с индексом 20.
ArrayIndexOfBoundsExceptionDemo.java
- Чтобы избежать ArrayIndexOfBoundsException вам стоит проверить массив вместо того, чтобы использовить try-catch.