Презентация по дисциплине Операционные системы и среды по теме Исключения
Оценка 4.9
Презентации учебные
pptx
информатика
Взрослым
14.10.2019
Презентация по дисциплине Операционные системы и среды по теме Исключения рассматриваются виды исключений, ошибок и исключительных ситуаций. Приводятся примеры кода на языке высокого уровня с использованием генерации throw, а также throws. Рассматриваются блоки finally, try, catch, а также вложенные структуры try / catch.
111.pptx
Презентация по дисциплине Операционные системы и среды по теме Исключения
Exceptions
Презентация по дисциплине Операционные системы и среды по теме Исключения
Исключения и их обработка
Исключениями или исключительными ситуациями называются ошибки,
возникшие в программе во время её работы.
Исключения в Java тоже являются объектами.
Они могут порождаться не только автоматически при возникновении
исключительной ситуации, но и создаваться самим разработчиком, еще
говорят "бросить" от слова "throws", исключительную ситуацию.
В Java есть пять ключевых слов для работы с исключениями:
try данное ключевое слово используется для отметки начала блока кода,
который потенциально может привести к ошибке.
catch ключевое слово для отметки начала блока кода, предназначенного
для перехвата и обработки исключений.
finally ключевое слово для отметки начала блока кода, которое является
дополнительным. Этот блок помещается после последнего блока 'catch'.
Управление обычно передаётся в блок 'finally' в любом случае.
throw служит для генерации исключений.
throws ключевое слово, которое прописывается в сигнатуре метода, и
обозначающее что метод потенциально может выбросить исключение с
указанным типом.
Презентация по дисциплине Операционные системы и среды по теме Исключения
Иерархия классов исключений
Презентация по дисциплине Операционные системы и среды по теме Исключения
Исключения делятся на несколько классов, но все они имеют общий
суперкласс Throwable. Его наследниками являются подклассы Exception и
Error.
Исключения (Exceptions) являются результатом проблем в программе.
Например, произошло деление на ноль в целых числах.
Ошибки (Errors) представляют собой более серьёзные проблемы, которые,
согласно спецификации Java, не следует пытаться обрабатывать в собственной
программе, поскольку они связаны с проблемами уровня JVM.
В Java все исключения делятся на два типа:
контролируемые исключения (checked), это те, которые должны
обрабатываться блоком catch или описываться в сигнатуре метода.
неконтролируемые исключения (unchecked), к которым относятся ошибки
(Errors) и исключения времени выполнения (RuntimeExceptions, потомок класса
Exception).
Unchecked могут не обрабатываться и не быть описанными.
К unchecked исключениям относятся, например, NullPointerException,
ArrayIndexOutOfBoundsException, ClassCastExcpetion и так далее.
Это те ошибки, которые могут возникнут практически в любом методе.
Несомненно, описывать каждый метод как тот, который обрабатывает все эти
исключения, не удобно, но если в методе возможна ситуация, которую метод
не в состоянии обработать самостоятельно, он должен "бросать" ошибку.
Но ни в коем случае нельзя использовать исключительные ситуации для
управления ходом выполнения программы.
Презентация по дисциплине Операционные системы и среды по теме Исключения
Пример стандартного обработчика ошибок
class Main {
public static void main(String[] args) {
int a = 4;
try {
System.out.println(a/0);
} catch (ArithmeticException e) {
System.out.println("Произошла недопустимая арифметическая операция");
}
}
}
Операторы программы, которые вы хотите отслеживать, помещаются в блок try.
Если исключение произошло, то оно создаётся и передаётся дальше. Ваш код может
перехватить исключение при помощи блока catch и обработать его.
try{
//здесь код, который потенциально может привести к ошибке
}
catch(SomeException e ){ //в скобках указывается класс конкретной ожидаемой ошибки
//здесь описываются действия, направленные на обработку исключений
}
finally{
//код, который нужно выполнить после завершения блока try
//выполняется в любом случае ( блок finnaly не обязателен)
}
Блок catch должен всегда связываться с блоком try и не может существовать
самостоятельно.
Презентация по дисциплине Операционные системы и среды по теме Исключения
Одному try может соответствовать сразу несколько
блоков catch с разными классами исключений.
import java.util.Scanner;
class Main {
public static void main(String[] args) {
int[] m = {1,0,1};
Scanner sc = new Scanner(System.in);
try {
int a = sc.nextInt();
m[a] = 4/a;
System.out.println(m[a]);
} catch (ArithmeticException e) {
System.out.println("Произошла недопустимая арифметическая
операция");
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("Обращение по недопустимому индексу массива");
}
}
}
Презентация по дисциплине Операционные системы и среды по теме Исключения
Следует помнить что!
При использовании множественных операторов catch обработчики подклассов
исключений должные находиться выше, чем обработчики их суперклассов.
Иначе, суперкласс будет перехватывать все исключения, имея большую
Иными словами, Exception не должен находиться выше ArithmeticException и
область перехвата.
ArrayIndexOutOfBoundsException.
} catch (Exception e) {
System.out.println("Произошло ещё какоето исключение");
}
Если обработка ошибок не отличается то существует конструкция, с помощью
которой можно пере отлавливать несколько исключений одни блоком catch:
try {
...
} catch( IOException | SQLException ex ) {
System.out.println(«Error message:» + ex.getMessage());
}
Презентация по дисциплине Операционные системы и среды по теме Исключения
Оператор throw
Mожно , бросить собственные исключения при помощи оператора throw который
порождает исключение .
if (text == null || word == null) {
throw new NullPointerException("text == null || word == null");
}
Поток выполнения останавливается непосредственно после оператора throw и
другие операторы не выполняются. При этом ищется ближайший блок try/catch
соответствующего исключению типа.
Презентация по дисциплине Операционные системы и среды по теме Исключения
Когда же нужно бросать ошибки?
Чаще всего Exceptions бросаются при нарушении контракта метода.
Контракт (contract) это негласное соглашение между создателем метода
(метод сделает и/или вернет именно то, что надо) и пользователем метода
(на вход метода будут передаваться значения из множества допустимых).
Пользователь метода может нарушить контракт, например, таким
способом: на вход Integer.parseInt(String) подать строку с буквами и по
заслугам получить NumberFormatException.
public Contract getContractById(String id) {
if (id == null) throw new NullPointerException("id is null");
...
}
Когда мы бросаем ошибку то помогаем вызывающей стороне понять,
что они нарушают контракт метода, причиной чего часто может быть
ошибка в логике их же приложения.
Презентация по дисциплине Операционные системы и среды по теме Исключения
Оператор throws
Если метод может породить исключение, которое он сам не обрабатывает, он должен
задать это поведение так, чтобы вызывающий его код мог позаботиться об этом исключении.
Для этого к объявлению метода добавляется конструкция throws, которая перечисляет
типы исключений. Общая форма объявления метода с оператором throws:
public int[] findWord(String text, String word) throws NullPointerException {
if (text == null || word == null) {
throw new NullPointerException("text == null || word == null");
}
int[] massivRez = new int[text.length()];
int indexOf = 0;
int i = 0;
int fromIndex = 0;
while (indexOf < text.length() && indexOf != 1) {
indexOf = text.indexOf(word, fromIndex);
if (indexOf >= 0) {
massivRez[i++] = indexOf;
fromIndex = indexOf += word.length();
}
}
int[] massivRez2 = new int[i];
for (int j = 0; j < i; j++) {
massivRez2[j] = massivRez[j];
}
return massivRez2;
}
Презентация по дисциплине Операционные системы и среды по теме Исключения
Список не проверяемых системных исключений
ArithmeticException арифметическая ошибка, например, деление на нуль
ArrayIndexOutOfBoundsException выход индекса за границу массива
ArrayStoreException присваивание элементу массива объекта несовместимого
типа
ClassCastException неверное приведение
EnumConstantNotPresentException попытка использования неопределённого
значения перечисления
IllegalArgumentException неверный аргумент при вызове метода
IllegalMonitorStateException неверная операция мониторинга
IllegalStateException некорректное состояние приложения
IllegalThreadStateException запрашиваемая операция несовместима с текущим
потоком
IndexOutofBoundsException тип индекса вышел за допустимые пределы
NegativeArraySizeException создан массив отрицательного размера
NullPointerException неверное использование пустой ссылки
NumberFormatException неверное преобразование строки в числовой формат
SecurityException попытка нарушения безопасности
StringIndexOutOfBounds попытка использования индекса за пределами строки
TypeNotPresentException тип не найден
UnsupportedOperationException обнаружена неподдерживаемая операция
Презентация по дисциплине Операционные системы и среды по теме Исключения
Создание своих классов исключений
Для обработки собственных исключений , специфичных для ваших
приложений, можно создавать собственные классы исключений.
Это достаточно просто сделать: просто определите подкласс Exception. Ваши
подклассы исключений не обязаны реализовывать чтолибо — важно само их
присутствие в системе типов, которое позволит использовать их как исключения.
class MyException extends Exception {
private int detail;
public MyException(int a) {
detail = a;
}
public String toString() {
return "MyException[" + detail +"]";
}
}
Презентация по дисциплине Операционные системы и среды по теме Исключения
public class ExceptionDemo {
static void compute(int a) throws MyException {
System.out.println("Вызван compute(" + a + ")");
if(a > 10) throw new MyException(a);
System.out.println("Нормальное завершение");
}
public static void main(String args[]) {
try {
compute(1);
compute(20);
}catch (MyException e) {
System.out.println("Перехвачено " + e) ;
}
}
}
Презентация по дисциплине Операционные системы и среды по теме Исключения
Mетоды класса Throwable
final void addSuppressed(Throwable exception) добавляет исключение в список
подавляемых исключений (JDK 7)
Throwable fillInStackTrace() возвращает объект класса Throwable, содержащий
полную трассировку стека.
Throwable getCause() возвращает исключение, лежащее под текущим исключение
или null
String getLocalizedMessage() возвращает локализованное описание исключения
StackTraceElement[] getStackTrace() возвращает массив, содержащий трассировку
стека и состояний из элементов класса StackTraceElement
final Throwable[] getSuppressed() получает подавленные исключения (JDK 7)
Throwable initCause(Throwable exception) ассоциирует исключение с вызывающим
исключением. Возвращает ссылку на исключение.
void printStackTrace() печатает stack trace, который содержит информацию, с
помощью которой можно определить причину исключения и место, где оно было
брошено.
void printStackTrace(PrintWriter stream) посылает трассировку стека в заданный
поток
void setStackTrace(StackTraceElement elements[]) устанавливает трассировку стека
для элементов (для специализированных приложений)
String toString() возвращает название класса и текст ошибки
String getMessage() возвращает текст ошибки
* для вывода ошибок можно использовать отдельный поток (System.err).
Материалы на данной страницы взяты из открытых истончиков либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.