L4_Exceptions.pptx
- Количество слайдов: 30
Обработка исключений Исключительные ситуации (exceptions) могут возникнуть во время выполнения (runtime) программы, прервав ее обычный ход. К ним относится деление на нуль, отсутствие загружаемого файла, отрицательный или вышедший за верхний предел индекс массива, переполнение выделенной памяти и масса других неприятностей, которые могут случиться в самый неподходящий момент.
Обработка исключений Исключение в языке Java — это объект, который описывает исключительную (т. е. ошибочную) ситуацию, произошедшую в некоторой части кода. Когда исключительная ситуация возникает, создается объект, представляющий это исключение, и "вбрасывается" в метод, вызвавший ошибку.
Обработка исключений Если в программе не описан обработчик исключения, то исключение захватывается обработчиком, заданным исполнительной системой Java по умолчанию. Любое исключение, которое не захвачено программой, будет в конечном счете выполнено обработчиком по умолчанию.
Обработка исключений Преимущества самостоятельной обработки исключений: во-первых, позволяет фиксировать ошибку, во-вторых, предохраняет программу от автоматического завершения.
Обработка исключений в Java управляется с помощью пяти ключевых слов: try, catch, finally, throw, throws.
try { Программные операторы, которые нужно контролировать относительно исключений } catch (Exception. Type 1 ex. Ob){ Операторы, обрабатывающие исключение Exception. Type 1, если оно возникло в блоке try } catch (Exception. Type 2 ex. Ob){ Операторы, обрабатывающие исключение Exception. Type 2, если оно возникло в блоке try } finally { Операторы, которые должны быть выполнены перед возвратом из try-блока }
Обработка исключений Когда вы используете множественные catch-операторы, важно помнить, что в последовательности catch-предложений подклассы исключений должны следовать перед любым из их суперклассов. Кроме того, в Java недостижимый код — ошибка.
Иерархия классов исключений Throwable Exception Runtime. Exception Error … …
Exception - используется для исключительных состояний, которые должны перехватывать программы пользователя. • Собственные заказные типы исключений, создаваемые программистами, являются подклассами Exception • Runtime. Exception, исключения этого типа определены автоматически и включают такие события, как деление на нуль, недопустимая индексация массива и т. п.
Error определяет исключения, перехват которых вашей программой при нормальных обстоятельствах не ожидается. Исключения типа Error применяются исполнительной системой Java для указания ошибок, имеющих отношение непосредственно к среде времени выполнения. Исключения типа Error обычно создаются в ответ на катастрофические отказы, которые, как правило, не могут обрабатываться вашей программой.
Обработка исключений Программа может сама явно выбрасывать исключения, используя оператор throw. Общая форма оператора throw такова: throw Throwable. Instance; Здесь Throwable. Instance должен быть объектом типа Throwable или подкласса Throwable.
Обработка исключений Два способа получения Throwable-объекта: • использование параметра в предложении catch; • создание объекта с помощью операции new. После оператора throw поток выполнения немедленно останавливается, и любые последующие операторы не выполняются. Затем просматривается ближайший включающий блок try с целью поиска оператора catch, который соответствует типу исключения. Если соответствие отыскивается, то управление передается этому оператору. Если нет, то просматривается следующее включение оператора try и т. д. Если соответствующий catch не найден, то программу останавливает обработчик исключений, заданный по умолчанию, и затем выводится трасса стека.
Обработка исключений Если метод способен к порождению исключения, которое он не обрабатывает, он должен определить свое поведение так, чтобы вызывающие методы могли сами предохранять себя от данного исключения. type имя_метода(список параметров) throws список исключений { // тело метода } Все исключения (кроме Error, Runtime. Exception или любых их подклассов), которые метод может выбрасывать, должны быть объявлены в предложении throws. Если данное условие не соблюдено, то произойдет ошибка времени компиляции.
Ссылки: http: //www. ppgrefinish. ru/ перевод какой-то книги по Java (русский); http: //download. oracle. com/javase/7/docs/api/ документация по классам Java (English); http: //www. javaportal. ru (русский); http: //www. javabeginner. com (English); http: //javaswing. wordpress. com/ Java Swing и другая Java (русский).
Определение интерфейса для стека: public interface IStack { void push(Object e) throws Stack. Overflow; Object pop() throws Stack. Underflow; Object peek() throws Stack. Underflow; void make. Empty(); boolean empty(); }
Определение ограниченного стека public class Bound. Stack implements Istack { //массив элементов private Object[] stack. Body; //количество элементов private int n. Elem; }
Определение ограниченного стека public Bound. Stack(int n) throws Stack. Underflow{ //количество элементов должно быть >0 If (n<=0) throw new Stack. Underflow(); //резервируем память stack. Body = new Object[n]; n. Elem=0; }
Определение ограниченного стека: //добавление нового элемента в стек public void push(Object e) throws Stack. Overflow{ //проверка на переполнение стека If (n. Elem == stack. Body. length) throw new Stack. Overflow(); stack. Body[n. Elem++]=e; }
Определение ограниченного списка: public Object pop() throws Stack. Underflow{ //проверка на пустоту стека if (n. Elem == 0) throw new Stack. Underflow(); //физически верхний элемент остается в //массиве, но количество уменьшается return stack. Body[--n. Elem]; }
Определение ограниченного стека: public Object peek() throws Stack. Underflow{ //проверка на пустоту стека if (n. Elem == 0) throw new Stack. Underflow(); Return stack. Body[n. Elem-1]; }
Определение ограниченного стека: public void make. Empty(){ n. Elem = 0; } public boolean empty(){ return n. Elem ==0; }
Анализ скобочной структуры текста с помощью стека public static boolean brackets(String txt, int maxdeep) throws Stack. Overflow{ try{ IStack stk = new Bound. Stack(maxdeep); for (int i = 0; i < txt. length(); i++) { char c = txt. char. At(i);
switch (c) { case ‘(‘: case ‘{‘: stk. push(new Character(c)); break; case ‘)’: if (((Character)stk. pop()). char. Value() != ‘(‘) return false; break; case ‘]’: if (((Character)stk. pop()). char. Value() != ‘[‘) return false; break; case ‘}’: if (((Character)stk. pop()). char. Value() != ‘{‘) return false; break; } } return stk. empty();
} catch (Stack. Underflow e) { return false; } } Если закрывающих скобок больше, чем открывающих, будет попытка извлечь элемент из пустого списка возникнет исключение Stack. Underflow, которое перехватится и функция выдаст значение false maxdeep определяет максимальную глубину вложенности скобок, при превышении этой глубины функция возбудит исключение Stack. Overflow
Наследование: A class that is derived from another class is called a subclass (also a derived class, extended class, or child class). The class from which the subclass is derived is called a superclass (also a base class or a parent class). Excepting Object, which has no superclass, every class has one and only one direct superclass (single inheritance). In the absence of any other explicit superclass, every class is implicitly a subclass of Object. Classes can be derived from classes that are derived from classes, and so on, and ultimately derived from the topmost class, Object. Such a class is said to be descended from all the classes in the inheritance chain stretching back to Object.
Наследование. You can declare some or all of a class's methods final. You use the final keyword in a method declaration to indicate that the method cannot be overridden by subclasses. The Object class does this—a number of its methods are final. Methods called from constructors should generally be declared final. If a constructor calls a non-final method, a subclass may redefine that method with surprising or undesirable results. Note that you can also declare an entire class final — this prevents the class from being subclassed. This is particularly useful, for example, when creating an immutable class like the String class.
Abstract class An abstract class is a class that is declared abstract—it may or may not include abstract methods. Abstract classes cannot be instantiated, but they can be subclassed. An abstract method is a method that is declared without an implementation (without braces, and followed by a semicolon). When an abstract class is subclassed, the subclass usually provides implementations for all of the abstract methods in its parent class. However, if it does not, the subclass must also be declared abstract.
Abstract Classes versus Interfaces Unlike interfaces, abstract classes can contain fields that are not static and final, and they can contain implemented methods. Such abstract classes are similar to interfaces, except that they provide a partial implementation, leaving it to subclasses to complete the implementation. If an abstract class contains only abstract method declarations, it should be declared as an interface instead.
Abstract Classes versus Interfaces Multiple interfaces can be implemented by classes anywhere in the class hierarchy, whether or not they are related to one another in any way. Think of Comparable or Cloneable, for example. By comparison, abstract classes are most commonly subclassed to share pieces of implementation. A single abstract class is subclassed by similar classes that have a lot in common (the implemented parts of the abstract class), but also have some differences (the abstract methods).
L4_Exceptions.pptx