Иерархия Исключений в Java
1. Иерархия классов исключений
Все исключения делятся на три группы:
Исключения (Exceptions) являются результатом проблем в программе, которые в принципе решаемы и предсказуемы. Например, произошло деление на ноль в целых числах.
Ошибки (Errors) представляют собой более серьёзные проблемы, которые, согласно спецификации Java, не следует пытаться обрабатывать в собственной программе, поскольку они связаны с проблемами уровня JVM. Например, исключения такого рода возникают, если закончилась память, доступная виртуальной машине. Программа дополнительную память всё равно не сможет обеспечить для JVM.
У класса Exception имеется важный подкласс - RuntimeException. Исключения этого типа автоматически определяются для создаваемых вами прикладных программ и охватывают такие ошибки, как деление на ноль и ошибочная индексация массивов.
Также исключения делятся по типу на неконтролируемые и контролируемые исключения. Неконтролируемые (unchecked) - RuntimeException, Error и их наследники.
Контролируемые исключения (checked) - все остальные наследники класса Exception.
Рассмотрим примеры:
Пример 1. Контролируемое исключения ParseException
import java.text.NumberFormat;
import java.text.ParseException;
public class NumberFormatExample4 {
public static void main(String[] args) throws ParseException {
NumberFormat nf = NumberFormat.getInstance();
System.out.println(nf.parse("1234,567"));
nf.setParseIntegerOnly(true);
System.out.println(nf.parse("1234,567"));
}
}
Пример 2. Контролируемое исключения ParseException
import java.text.NumberFormat;
import java.text.ParseException;
public class ExceptionExample4 {
public static void main(String[] args) {
try {
parseNumber("sss");
} catch (ParseException e) {
System.out.println(e.getMessage());
}
System.out.println("Конец программы.");
}
public static void parseNumber(String str) throws ParseException {
NumberFormat nf = NumberFormat.getInstance();
System.out.println(nf.parse(str));
}
}
Пример 3. Неконтролируемое исключения ArithmeticException
public class ExceptionExample1 {
public static void main(String[] args) {
subRoutine();
}
public static void subRoutine() {
int d = 0;
int a = 10 / d;
}
}
Пример 4. Неконтролируемое исключения ArrayIndexOutOfBoundsException
public class ExceptionExample2 {
public static void main(String[] args) {
int[] array = new int[3];
System.out.println(array[4]);
}
}
Пример 5. Неконтролируемое исключения StackOverflowError
public class StackOverflowErrorExample {
public static void main(String[] args) {
System.out.println("1");
main(args);
}
}
Пример 6. Неконтролируемое исключения ClassCastException
public class ClassCastExceptionExample {
public static void main(String[] args) {
method(new int[0]);
}
private static void method(Object arg) {
String x = (String) arg;
}
}
Пример 7. Неконтролируемое исключения NullPointerException
public class NullPointerExceptionExample {
public static void main(String[] args) {
String str = null;
System.out.println(str.length());
}
}
2. Методы, определенные в классе Throwable
- Throwable getCause() - возвращает исключение, положенное в основу текущего исключения. Если такое исключение отсутствует, то возвращается пустое значение null.
- String getLocalizedMessage() - возвращает локализованное описание исключения.
- String getMessage() - возвращает описание исключения.
- StackTraceElement[] getStackTrace() - возвращает массив, содержащий поэлементную трассировку стека в виде объектов класса StackTraceElement. На вершине стека находится метод, который был вызван непосредственно перед генерированием исключения. Этот метод содержится в первом элементе массива. Класс StackTraceElement предоставляет доступ к данным о каждом элементе трассировки, например к имени вызванного метода.
- void printStackTrace() - отображает трассу стека.
- void printStackTrace(PrintStream stream) - посылает трассу стека указанному потоку.
- void printStackTrace(PrintWriter stream) - посылает проекцию прямой стека указанному потоку.
- String toString() - возвращает String-объект, содержащий описание исключения. Этот метод вызывается из println() при выводе Throwable-объекта.
Зарегистрируйтесь или войдите, чтобы иметь возможность оставить комментарий.