Presentation is loading. Please wait.

Presentation is loading. Please wait.

Новосибирск, 2004 (С) Всеволод Рылов, все права защищены 1 Основы программирования на языке Java Обработка исключений.

Similar presentations


Presentation on theme: "Новосибирск, 2004 (С) Всеволод Рылов, все права защищены 1 Основы программирования на языке Java Обработка исключений."— Presentation transcript:

1 Новосибирск, 2004 (С) Всеволод Рылов, все права защищены 1 Основы программирования на языке Java Обработка исключений

2 Новосибирск, 2004 (С) Всеволод Рылов, все права защищены 2 Ключевые слова – статус Ключевые слова, которые уже известны на текущий момент: abstractdefaultifprivatethis boolean doimplementsprotectedthrow breakdouble importpublicthrows byteelseinstanceofreturntransient caseextendsintshort try catchfinalinterfacestaticvoid char finally longstrictfpvolatile class float native super while const for new switch continue goto package synchronized

3 Новосибирск, 2004 (С) Всеволод Рылов, все права защищены 3 Класс java.lang.Object protected Object clone() используется для клонирования объектов. Для обеспечения клонирования класс должен перегрузить данный метод сделав его public и реализовав интерфейс Cloneable Class getClass() Возвращает объект типа Class содержащий информацию о классе объекта (о его методах, аттрибутах, пакете, правах доступа и т.д.) int hashCode() boolean equals() Возвращает значение hash функции от объекта. проверяет объекты на эквивалентность. Если вы перегружаете один из этих методов, то должны перегружать и другой. protected void finalize() Если вы перегрузили данный метод, то он будет вызван сборщиком мусора перед уничтожением объекта. wait(), notify(), notifyAll() Используются для синхронизации потоков при работе с объектами в многопоточном приложении String toString() Возвращает строковое представление объекта

4 Новосибирск, 2004 (С) Всеволод Рылов, все права защищены 4 Причины возникновения исключений  Ошибочная ситуация синхронно обработанная JVM во время вычисления выражения:  Выражение нарушает нормальную семантику языка (деление на ноль и т.д.)  Ошибка во время загрузки или связывания части программы  Нехватка ресурсов (недостаток памяти и др.) Эти исключения не вызываются в предопределенной точке программы.  Вызов оператора throw  Асинхронная ошибка, возникающая в следующих ситуациях:  вызов метода stop() класса Thread  внутренняя ошибка в виртуальной машине

5 Новосибирск, 2004 (С) Всеволод Рылов, все права защищены 5 Иерархия базовых исключений

6 Новосибирск, 2004 (С) Всеволод Рылов, все права защищены 6 Класс java.lang.Throwable  Базовый класс для всех классов исключений и ошибок, объект которого содержит информацию о стеке исполнения потока  Конструкторы: Throwable() Создает новый объект на основе информации о стеке текущего потока Throwable(String message) Создает новый объект на основе информации о стеке текущего потока плюс позволяет задать текст сообщения об ошибке Throwable(Throwable cause) Создает новый объект – обертку вокруг другого объекта Throwable. Стек вызовов заполняется на основе информации о стеке текущего потока Throwable(String message, Throwable cause) Создает объект-обертку с возможностью переопределения сообщения

7 Новосибирск, 2004 (С) Всеволод Рылов, все права защищены 7 Класс java.lang.Throwable (полезные методы) String getMessage() String getLocalizedMessage() Возвращает текст сообщения об ошибке printStackTrace() printStackTrace(PrintStream s) printStackTrace(PrintWriter s) Выводит информацию о стеке вызовов на момент возникновения ошибки. Распечатка ведется на стандартный поток ошибок или в указанный поток native Throwable fillInStackTrace() Заполняет информацию о стеке вызовов для текущего потока в объект Throwable и возвращает ссылку на этот-же объект. Используется конструкторами. initCause(Throwable cause) Throwable getCause() Манипуляция с объектом-источником (для оберток) StackTraceElement[ ] getStackTrace() setStackTrace(StackTraceElem ent[ ] stackTrace) Позволяет работать с элементами стека вызовов

8 Новосибирск, 2004 (С) Всеволод Рылов, все права защищены 8 Класс java.lang.StackTraceElement String getClassName() String getFileName() String getLineNumber() String getMethodName() Выдают информацию о точке вызова (исходный файл, строка в нем, имя класса, имя метода). Для того чтобы информация была доступна, код должен быть откомпилирован с включенной отладочной информацией int hashCode() boolean equals(Object obj) String toString() Перегруженные методы класса Object обеспечивающие сравнение двух объектов типа StackTraceElement, а также строковое представление boolean isNativeMethod() Возвращает true если вызван native метод

9 Новосибирск, 2004 (С) Всеволод Рылов, все права защищены 9 Error, Exception, RuntimeException  java.lang.Error – ошибки работы виртуальной машины java. Выбрасываются самой виртуальной машиной и сигнализируют о серьезных проблемах.  java.lang.Exception – базовый класс для исключений библиотеки и разрабатываемых приложений. Обычные исключения должны наследоваться от этого класса  java.lang.RuntimeException – специальный класс исключений, наследников которого не обязательно перехватывать с помощью try-catch и декларировать в throws списке метода. Используется для исключений, которые сигнализируют об ошибках при написании программы

10 Новосибирск, 2004 (С) Всеволод Рылов, все права защищены 10 Runtime исключения синхронно вызываемые JVM при нарушении семантики языка при вычислении выражений  OutOfMemoryError во время создания объекта (объекта – класса, массива, временного объекта при конкатенации строк)  NegativeArraySizeException во время создания объекта – массива.  NullPointerException во время использования (доступ к полю или вызов метода) ссылки или выражения результатом которого является ссылочный тип, имеющего значение null  NullPointerException при обращении к элементу массива в случае если ссылка на массив содержит null  ArrayIndexOutOfBoundsException в случае выхода за границы массива  ClassCastException при попытке приведения несовместимых типов.  Деление на ноль при выполнении операторов «/», «%» приводит к ArithmeticException  ArrayStoreException при попытке присваивания элементу массива значения несовместимого ссылочного типа.

11 Новосибирск, 2004 (С) Всеволод Рылов, все права защищены 11 Обработка исключений  Все исключения кроме наследников java.lang.Error и java.lang.RuntimeException должны явно обрабатываться одним из двух способов:  Выражение которое может привести к возникновению исключительной ситуации должно быть помещено в try – catch блок, который перехватит данное исключение  Метод содержащий выражение которое может привести к возникновению исключительной ситуации должен в объявлении throws содержать совместимый тип исключения (такой-же тип либо суперкласс данного исключения)  Исключение прерывает нормальную последовательность исполнения выражений и приводит к передачи управления вверх по стеку вызовов методов вплоть до точки перехвата исключения

12 Новосибирск, 2004 (С) Всеволод Рылов, все права защищены 12 try – catch – finally TryStatement: try Block Catches try Block Catches opt Finally Catches: CatchClause Catches CatchClause CatchClause: catch ( FormalParameter ) Block Finally: finally Block FormalParameter: final opt Type VariableDeclaratorId VariableDeclaratorId: Identifier VariableDeclaratorId [ ] try { … } catch (ChildException ce) { … } catch (ParentException pe) { … } catch (Exception ex) { … } catch (Throwable thr) { … } finally { … }

13 Новосибирск, 2004 (С) Всеволод Рылов, все права защищены 13 Обработка исключений try {... throw new Exception (“Description”);... } catch (Exception e) { System.err.println(“Exception caught:”+e); System.err.println(e.getMessage()); e.printStackTrace(); //На System.err e.printStackTrace(System.out);// PrintStream throw e; //Повторная генерация исключения } finally { //do something there System.out.println(“finally block”); }

14 Новосибирск, 2004 (С) Всеволод Рылов, все права защищены 14 Пример обработки исключений class Test { public void doIt() throws Exception{ throw new Exception("doIt"); } public void doAnother() throws Exception { doIt(); } public void letsDoIt() throws Exception { try { doAnother(); } catch (Exception e) { System.out.println("first printStackTrace:"); e.printStackTrace(System.out); System.out.println("local context in catch:"); Throwable t = new Throwable(); t.fillInStackTrace(); t.printStackTrace(System.out); System.out.println("Throw it again..."); throw e; } public class Main { public static void main(String[] args) { Test t = new Test(); try { t.letsDoIt(); } catch (Exception e) { System.out.println("Second printStackTrace:"); e.printStackTrace(System.out); }

15 Новосибирск, 2004 (С) Всеволод Рылов, все права защищены 15 Блок finally – отрабатывает всегда: public class FinallyDemo { static void procA() { try { System.out.println("procA"); throw new RuntimeException("Demo"); } finally { System.out.println("finally procA"); } static void procB() { try { System.out.println("procB"); return; } finally { System.out.println("finally procB"); } static void procC() { try { System.out.println("procC"); } finally { System.out.println("finally procC"); } public static void main(String[] args) { try { procA(); } catch (Exception ex) { System.out.println("Exception was caught"); ex.printStackTrace(System.out); } procB(); procC(); }


Download ppt "Новосибирск, 2004 (С) Всеволод Рылов, все права защищены 1 Основы программирования на языке Java Обработка исключений."

Similar presentations


Ads by Google