Тема исключений затрагивает большой материал, и по этому я разделить ее на две части, в первой мы говорили об исключении и его синтаксисе об этом вы можете почитать здесь. А вот сейчас мы поговорим во второй части нашей статьи, о типах исключений. Исключение и его подклассы используются для исключительных условий, что бы пользовательские программы могли их поймать и обработать, что бы предотвратить сбой работы программы. Вы можете создать подкласс Exception для создания собственных пользовательских типов исключений.
Ошибка определяется исключением, которое не должно быть поймано в нормальных условиях выполнения программы. Работа системы Java об ошибках приложения, заключается в том что бы указать на ошибки в среде исполнения. Переполнение стека является примером такой ошибки.
Неперехваченные исключения
Эта небольшая программа показывает пример java исключения. Она включает в себя выражение, которое преднамеренно вызывает ошибку деления на ноль:
//nookery.ru
public class Test {
public static void main(String args[]) {
int resualt=20/0;
}
}
Результатом работы программы будет:
Exception in thread «main» java.lang.ArithmeticException: / by zero
Рассмотрим эту же программы но, момент вычисления поместим в отдельный метод и посмотрим на работу программы.
package TestPackage;
//nookery.ru
public class Test {
public static void delenie(){
int resualt=20/0;
}
public static void main(String args[]) {
delenie();
}
}
Результатом работы программы будет:
Exception in thread «main» java.lang.ArithmeticException: / by zero
at TestPackage.Test.delenie(Test.java:8)
at TestPackage.Test.main(Test.java:13)
Здесь мы видим в результате трассировки стека из обработчика исключений, как отображается весь стек вызовов.
Встроенные исключения в Java.
Если исключения подкласса RuntimeException не может быть включена в любой из методов throws списка. Они называются незарегистрированными исключениями. Незарегистрированные исключения, определенные в java.lang, я специально для вас составил java список исключений:
| исключение | Описание |
| ArithmeticException | Арифметика ошибка, например, деление на ноль. |
| ArrayIndexOutOfBoundsException | Индекс массива выходит за пределы поля. |
| ArrayStoreException | Присвоение элементу массива несовместимого типа. |
| ClassCastException |
Недопустимое приведение
|
| EnumConstantNotPresentException | Сделана попытка использовать неопределенное значение перечисления. |
| IllegalArgumentException | Нелегальная аргумент, используемый для вызова метода. |
| IllegalMonitorStateException | Незаконная операция монитора, например, ожидание на разблокированный поток. |
| IllegalStateException | Окружающая среда или приложение в некорректном состоянии. |
| IllegalThreadStateException | Запрошенная операция не совместима с текущим состоянием потока. |
| IndexOutOfBoundsException | Некоторые тип индекса выходит за пределы поля. |
| NegativeArraySizeException | Массив создается с отрицательным размером. |
| Исключение нулевого указателя | Неправильное использование нулевой ссылки. |
| NumberFormatException | Неправильное преобразование строки в числовой формат. |
| SecurityException | Попытка нарушить безопасность. |
| StringIndexOutOfBounds | Попытка индекса за пределы строки. |
| TypeNotPresentException | Тип не найден. |
| UnsupportedOperationException | Неподдерживаемая операция была обнаружена. |
Проверяемые исключения перечислены в следующей таблице:
| Исключение | Описание |
| ClassNotFoundException | Класс не найден. |
| CloneNotSupportedException | Попытка клонировать объект, который не реализует интерфейс Cloneable. |
| IllegalAccessException | Доступ к классу запрещен. |
| InstantiationException | Попытка создать объект абстрактного класса или интерфейса. |
| InterruptedException | Один поток был прерван другим потоком. |
| NoSuchFieldException | Запрашиваемый поле не существует. |
| NoSuchMethodException | Запрашиваемый метод не существует. |
Java класс пользовательские исключения.
Вы можете создать свой собственный класс исключений , путем определения подкласса исключений.
Класс исключений не определяет никаких собственных методов. Он наследует методы , предоставляемые Throwable .
Следующая программа создает пользовательский тип исключения.
//nookery.ru
class MyException extends Exception {
private int i;
MyException(int a) {
i = a;
}
public String toString() {
return "MyException[" + i + "]";
}
}
public class Test {
static void port(int a) throws MyException {
System.out.println("Слушаем порт(" + a + ")");
if (a > 10)
throw new MyException(a);
System.out.println("Выход");
}
public static void main(String args[]) {
try {
port(8);
port(26);
} catch (MyException e) {
System.out.println("Ошибка " + e);
}
}
}
Результатом работы программы будет:
Слушаем порт(8)
Выход
Слушаем порт(26)
Ошибка MyException[26]
Java прикованные исключения.
Прикованные исключение позволяют связать одно исключение с другим исключением. Происходит процесс в котором второе исключение описывает причину первого исключения.
Ниже я привел пример, который иллюстрирует механику обработки прикованных исключения:
//nookery.ru
public class Test {
static void demo() {
NullPointerException e = new NullPointerException("Ошибка №1");
e.initCause(new ArithmeticException("Ошибка №2"));
throw e;
}
public static void main(String args[]) {
try {
demo();
} catch (NullPointerException e) {
System.out.println("Вывод: " + e);
System.out.println("Вывод: " + e.getCause());
}
}
}
Результатом работы программы будет:
Вывод: java.lang.NullPointerException: Ошибка №1
Вывод: java.lang.ArithmeticException: Ошибка №2
