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

Презентация:



Advertisements
Похожие презентации
Кафедра ОСУ, Java 2004 Обработка исключений В Java обработка исключительных ситуаций (exception handling) происходит следующим образом: Либо.
Advertisements

Saint Petersburg, 2011 Java Lecture #06 Exceptions.
1 Обработка исключений в Java Одно из важнейших преимуществ Java – разработанный на уровне языка механизм обработки исключений. Исключение в Java - это.
Исключения в Java. Исключения – это механизм взаимодействия между кодом, приведшим к ошибке, и кодом, обрабатывающим ошибку Исключение выбрасывается (throw),
Обработка исключительных ситуаций. Синтаксис try{ операторы0; } catch (ТипИсключения1 переменная1){ операторы1; } catch (ТипИсключения2 переменная2){
Обработка исключительных ситуаций Андрей Дмитриев 2008.
Test 6 Вопрос 1. Как можно уничтожить объект в Java? a)присвоить null всем ссылкам на объект b)вызвать Runtime.getRuntime().gc() c)вызвать метод finalize()
Типы данных Инна Исаева. Переменные Переменная - это как ящик, в котором можно хранить данные. Каждая переменная имеет своё имя, она служит для хранения.
Часть 1. Основы ООП Исключения.. Структурный подход Неисправимые ошибки – вывести информацию и умереть. Исправимые ошибки – уведомить вызывающую.
Лекция 2 Наследование Наследование в Java имеет тот же смысл, что и в С++. Однако наследование в Java осуществляется при помощи ключевого слова extends.
Исключительные ситуации. Схема обработки исключений Try { //охраняемый блок trow (new MyException();) } catch(MyExeption e) { … } catch(Exeption e){ …
Java: интерфейсы, наследование, обработка исключительных ситуаций Вашенков Олег Евгеньевич.
Наследование Наследование – это отношение является между классами. class Person { string first_name; int birth_year;... } class Student : Person { float.
Синтаксис языка Java. Символы и синтаксис Перевод строчки эквивалентен пробелу Регистр в именах различается.
Обработка исключительных ситуаций Исключительная ситуация (исключение) – это ошибка, возникающая во время выполнения программы. Например, ошибка работы.
Новосибирск, 2004 (С) Всеволод Рылов, все права защищены 1 Основы программирования на языке Java Стандартная библиотека Java: java.net; Многопоточное программирование.
Java in pictures. Типы данных Примитивы: boolean, byte (8) char, short,(16) int, float,(32) long,double(64) Ссылочные типы Классы Интерфейсы Массивы enum.
Программная инженерия Дмитриев Андрей Владиславович
Изучение динамического определения типов. Класс Class. Динамическая загрузка и инстанцирование классов. В Java вся информация о классе хранится в специальном.
Программирование Часть 8 Обработка исключений.
Транксрипт:

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

Новосибирск, 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

Новосибирск, 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() Возвращает строковое представление объекта

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

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

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

Новосибирск, 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) Позволяет работать с элементами стека вызовов

Новосибирск, 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 метод

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

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

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

Новосибирск, 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 { … }

Новосибирск, 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); }

Новосибирск, 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); }

Новосибирск, 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(); }